青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品


最近工作中遇到Window Ghosting這個問題, 感覺挺有意思,這里簡單記錄下。



在XP時代我們的程序沒有響應后只能通過任務管理器強制殺掉,但是Vista之后情況變了, 我們仍然可以拖動失去響應的窗口,甚至可以嘗試最小化和關閉窗口, 我們把這個特性叫住Window Ghosting。

首先我們考慮下怎樣判斷一個窗口是否已經失去響應?
 
一般我們想到的是SendMessageTimeout,給窗口發送WM_NULL消息,判斷返回是否超時。這當然也是一種方法,但是系統有更方便的API  IsHungAppWindow, 該API是判斷窗口是否失去響應的標準方法。我們猜測IsHungAppWindow內部是否通過SendMessageTimeout來實現的, 跟蹤下我們會發現不是我們想象的那樣, IsHungAppWindow內部掉用了未公開的API NtUserQueryWindow。

接下來考慮下 IsHungAppWindow 是如何鑒定一個窗口是否在失去響應狀態?

這是MSDN中的原話: 
Determines whether the system considers that a specified application is not responding. An application is considered to be not responding if it is not waiting for input, is not in startup processing, and has not calledPeekMessage within the internal timeout period of 5 seconds.
簡單來說就是程序在非等待輸入狀態 ,不是在程序啟動階段, 并且5秒內沒有從消息隊列中取消息。 

下面我們思考系統是如何實現Window Ghosting的?

我們知道失去響應的窗口一般來說是因為UI線程正在做一些繁忙的工作, 或是UI線程死鎖而沒有在繼續運行了。 那這里就很奇怪了, UI線程都失去響應了, 窗口怎么還能響應我們的鼠標拖動消息?我們的鼠標拖動事件需要運行在UI線程中才行 ,該實現有些顛覆我們現有的計算機知識。

這里的關鍵就是我們看到的失去響應的窗口是不是還是我們原來的窗口? 實際上我們真正的窗口已經讓系統用Ghosting窗口替代了。
完整過程是這樣的, 當系統檢測到我們程序窗口失去響應了, 系統進程(dwm.exe)會以相同的Z-order, 位置,大小和Style創建一個ghosting窗口(可以通過SPY查看 ,類名是Ghost), 我 們看到的失去響應的窗口就是這個窗口, 該窗口的客戶區內容是從老窗口中拷貝過來的。而我們原來真正窗口依舊在那里(style, 位置,大小和z-order都沒有變 ), 但是dwm.exe合成屏幕內容是并不會把這個窗口畫出來, 所以我們看起來就是原來的窗口給hide了。
 
這就是Window Ghosting的奧秘, 我們可以在程序中調用 API DisableProcessWindowsGhosting 來禁止系統對我們的程序使用 Window Ghosting.

Window Ghosting這個特性很不錯, 讓失去響應的程序也有很好的用戶體驗, 但是它也帶來了一些問題。

我遇到的問題是我們在枚舉窗口的過程中,我們通過GetWindowRect查詢一個失去響應的程序窗口的位置,但是返回結果卻和我們屏幕上看到的不一致, 因為我們看到的是被我們拖動過的Ghosting window,但是API返回的確是被hide的原窗口的位置。 這種情況下我們需要原窗口和Ghosting窗口的一張映射表, 但是我還沒有找到他們對應關系的方法, 不知道系統又沒有相關API提供?一種方法是通過查找類名是"Ghost"的窗口,判斷進程是不是dwm.exe, 再通過標題匹配。但是該方法效率低,也不可靠。
posted on 2014-01-08 21:26 Richard Wei 閱讀(3247) 評論(3)  編輯 收藏 引用 所屬分類: windows desktop

FeedBack:
# re: Window Ghosting
2014-01-08 21:50 | relax
挺有意思  回復  更多評論
  
# re: Window Ghosting[未登錄]
2014-01-08 22:12 | 萬連文
記憶中是Send/PostMessage返回FALSE表示窗口假死,Chromium源碼中有的。Ghosting是很早就知道了,感覺有遮罩層的意思,方便接管消息做統一的假死處理。  回復  更多評論
  
# re: Window Ghosting
2014-01-09 10:24 | Richard Wei
@萬連文
對假死窗口調用SendMessage應該會一直等待,不會返回, 直到窗口有響應  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            新67194成人永久网站| 亚洲线精品一区二区三区八戒| 久久精品国产精品亚洲| 亚洲欧美欧美一区二区三区| 一区二区高清| 亚洲一区二区三区三| 亚洲香蕉伊综合在人在线视看| 亚洲香蕉成视频在线观看 | 亚洲国产成人精品视频| 久久资源av| 亚洲国产专区校园欧美| 久久中文字幕一区二区三区| av成人黄色| 宅男精品视频| 亚洲免费在线电影| 蜜臀久久久99精品久久久久久| 欧美 日韩 国产一区二区在线视频| 久久久亚洲一区| 91久久中文字幕| 亚洲欧美日韩在线一区| 久久青青草综合| 欧美日韩一二区| 在线观看亚洲一区| 性欧美8khd高清极品| 欧美1区免费| 欧美一级黄色录像| 欧美日韩国产综合视频在线| 国产午夜精品理论片a级探花 | 午夜精品亚洲| 欧美专区福利在线| 老牛嫩草一区二区三区日本 | 制服丝袜激情欧洲亚洲| 老妇喷水一区二区三区| 伊人狠狠色丁香综合尤物| 西瓜成人精品人成网站| 一本一本大道香蕉久在线精品| 免费日韩精品中文字幕视频在线| 韩国女主播一区| 牛夜精品久久久久久久99黑人| 香蕉成人伊视频在线观看| 牛牛精品成人免费视频| 欧美黄色影院| 久久久综合激的五月天| 亚洲线精品一区二区三区八戒| 欧美一激情一区二区三区| 日韩视频免费在线| 99国产精品99久久久久久粉嫩| 亚洲免费播放| 一区二区电影免费观看| 日韩视频专区| 91久久精品国产91性色tv| 久久精品国产2020观看福利| 国精品一区二区三区| 欧美激情视频免费观看| 欧美国产日产韩国视频| 欧美日韩国产精品自在自线| 国产精品久久国产愉拍| 国产精品久久精品日日| 国产精品成人久久久久| 激情亚洲网站| 久久免费视频网| 久久国产视频网| 国产精品久久久久久久久搜平片| 日韩视频一区二区在线观看| 亚洲综合色在线| 国产精品美女xx| 小黄鸭精品密入口导航| 亚洲精品欧美极品| 国产精品视频免费观看| 西瓜成人精品人成网站| 先锋影音久久| 在线看片日韩| 欧美激情免费观看| 欧美日韩免费一区二区三区视频 | 宅男精品导航| 亚洲日本欧美在线| 欧美成人69av| 欧美女同在线视频| 午夜精品电影| 欧美精品一区三区| 亚洲视频免费| 久久精品国产77777蜜臀| 在线播放视频一区| 99精品视频一区| 国产精品区二区三区日本| 欧美大胆成人| 国产欧美日韩专区发布| 亚洲区一区二| 一区二区三区无毛| 99精品99| 亚洲精品午夜精品| 久久精品国产久精国产一老狼| 亚洲美女少妇无套啪啪呻吟| 欧美综合第一页| 欧美在线观看视频在线| 欧美色图首页| 日韩亚洲精品电影| 亚洲第一精品久久忘忧草社区| 一本大道av伊人久久综合| 日韩亚洲成人av在线| 欧美久久电影| 亚洲精品视频在线| 制服丝袜激情欧洲亚洲| 欧美日韩成人一区二区| 亚洲女性裸体视频| 亚洲国产精品一区制服丝袜| 亚洲破处大片| 国产精品综合av一区二区国产馆| 亚洲欧美在线高清| 亚洲精品久久7777| 国产亚洲一区二区精品| 欧美日韩一区二区国产| 性欧美video另类hd性玩具| 久久久av毛片精品| 亚洲国产欧美一区| 欧美日韩在线免费观看| 欧美中文字幕视频| 99精品欧美一区二区三区综合在线 | 欧美午夜精品久久久| 一区二区三区产品免费精品久久75 | 一本大道久久a久久精二百| 欧美私人网站| 久久尤物电影视频在线观看| 亚洲最新视频在线播放| 亚洲国产精品久久久久婷婷老年| 一区二区三区视频在线看 | 一区二区免费看| 亚洲国产精品va在线看黑人动漫| 久久久久在线| 久久精品亚洲精品国产欧美kt∨| 亚洲天堂激情| 一本一道久久综合狠狠老精东影业| 亚洲美洲欧洲综合国产一区| 在线免费观看日韩欧美| 亚洲欧洲在线视频| 日韩视频一区二区在线观看| 久久不射中文字幕| 亚洲欧美日韩一区在线观看| 亚洲天堂久久| 午夜精品久久久久| 欧美午夜剧场| 国产欧美日韩在线播放| 国产日韩欧美在线| 久久国产欧美日韩精品| 欧美一区二区三区久久精品| 午夜影院日韩| 欧美大片va欧美在线播放| 亚洲成人在线视频播放 | 久久精品综合一区| 性久久久久久| 蜜臀a∨国产成人精品| 欧美视频久久| 日韩亚洲欧美高清| 能在线观看的日韩av| 午夜精品福利在线| 国产美女精品免费电影| 久久久91精品| 欧美成va人片在线观看| 一本久道久久综合狠狠爱| 久久激情网站| 老司机午夜精品视频在线观看| 欧美日韩国产综合久久| 国产精品爽黄69| 999在线观看精品免费不卡网站| 欧美一区二区久久久| 亚洲精品视频免费观看| 麻豆精品一区二区av白丝在线| 欧美日韩国产成人在线观看| 国产欧美在线看| 亚洲免费一在线| 亚洲国产一二三| 欧美国产精品| 欧美在线观看网站| 国产精品日韩精品欧美精品| 亚洲少妇中出一区| 一区二区免费看| 国产美女诱惑一区二区| 久久xxxx精品视频| 久久高清国产| 亚洲国产美女| 亚洲精品小视频| 国产精品你懂的在线| 亚洲永久字幕| 欧美专区福利在线| 亚洲国产成人一区| 一区二区欧美精品| 国产综合久久久久影院| 亚洲国产精品123| 欧美日本一区二区三区| 在线视频日韩| 国内久久婷婷综合| 亚洲人成在线观看一区二区| 欧美日韩视频在线观看一区二区三区| 日韩一级免费观看| 亚洲欧美日韩综合aⅴ视频| 在线看不卡av| 久久裸体视频| 亚洲免费网站| 欧美日韩一区二区在线播放| 久久免费高清视频|