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


最近工作中遇到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 閱讀(3255) 評論(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>
            一区二区欧美在线观看| 欧美日韩国产精品| 欧美国产一区二区| 欧美wwwwww| 久久中文欧美| 欧美一区二区国产| 欧美在线视频二区| 久久综合伊人77777蜜臀| 校园春色综合网| 亚洲调教视频在线观看| 性久久久久久| 午夜亚洲性色福利视频| 欧美一区二区三区视频在线观看| 亚洲字幕一区二区| 久久久久国产精品厨房| 久久国内精品视频| 久久久www| 欧美成人综合| 欧美视频在线观看| 国产欧美 在线欧美| 欧美日韩国产一区| 国产精品女人久久久久久| 在线国产亚洲欧美| 亚洲老板91色精品久久| 欧美一区二区三区精品电影| 久久嫩草精品久久久精品| 美女主播一区| 亚洲午夜极品| 欧美一区二区三区在线观看 | 国产婷婷精品| 亚洲国产婷婷香蕉久久久久久99| 亚洲国产日韩欧美在线动漫| 亚洲社区在线观看| 久久超碰97中文字幕| 老鸭窝亚洲一区二区三区| 在线一区观看| 久久九九全国免费精品观看| 欧美中文在线视频| 欧美福利小视频| 中日韩视频在线观看| 欧美成人a∨高清免费观看| 欧美午夜剧场| 国产精品日韩精品欧美在线| 亚洲卡通欧美制服中文| 午夜一区在线| 9色国产精品| 久久人人97超碰精品888| 欧美亚韩一区| 一区二区三区产品免费精品久久75| 久久国产黑丝| 亚洲精品专区| 欧美喷水视频| 一区免费在线| 欧美一区1区三区3区公司| 亚洲娇小video精品| 一区二区三区国产在线| 国产精品亚洲一区二区三区在线| 国产精品vvv| 日韩午夜剧场| 噜噜噜噜噜久久久久久91 | 久久综合婷婷| 国产老肥熟一区二区三区| 亚洲精品国产日韩| 牛牛国产精品| 性欧美大战久久久久久久久| 欧美日韩免费| 一区二区三区视频在线观看| 欧美激情2020午夜免费观看| 欧美一级免费视频| 国产一区视频观看| 午夜激情亚洲| 中文在线一区| 国产精品麻豆va在线播放| 一区二区三区欧美在线| 亚洲国产精品999| 老司机午夜精品视频| 欧美一区二区黄| 国产午夜精品一区二区三区视频| 久久久久久亚洲精品不卡4k岛国| 亚洲欧美国产77777| 国产精品久久久久久久久久久久久| 亚洲视频在线观看视频| 亚洲精品一区二区三区四区高清 | 久久久视频精品| 尤物精品国产第一福利三区| 欧美国产精品久久| 免费在线观看一区二区| 亚洲高清毛片| 亚洲欧洲日本国产| 欧美成人四级电影| 99国产精品国产精品久久| 亚洲国产裸拍裸体视频在线观看乱了| 久久久综合网站| 亚洲久久视频| 日韩亚洲欧美在线观看| 欧美性猛交xxxx免费看久久久| 欧美专区福利在线| 久久久蜜桃精品| 99在线精品免费视频九九视| 亚洲一区二区三| 黄色亚洲免费| 亚洲第一视频网站| 国产精品日韩欧美大师| 久久久av网站| 欧美mv日韩mv亚洲| 欧美一区=区| 麻豆国产精品一区二区三区| 99视频热这里只有精品免费| 亚洲午夜电影在线观看| 狠狠色丁香久久婷婷综合丁香 | 国语精品中文字幕| 欧美好骚综合网| 久久全球大尺度高清视频| 亚洲欧美美女| 久久久久九九视频| 经典三级久久| 一区二区三区蜜桃网| 韩国av一区二区三区在线观看| 久久久国产成人精品| 欧美日韩国产精品 | 亚洲图片在区色| 久久久久久久999| 欧美在线观看一区二区三区| 免费日韩成人| 欧美一区二区三区在线视频| 欧美精品一卡二卡| 久久天堂成人| 国产精品久久97| 欧美在线啊v| 亚洲精品一区二区三区婷婷月 | 国产精品久久久久久久久搜平片| 久热爱精品视频线路一| 国产欧美日韩三级| 一区二区日韩伦理片| 在线看日韩av| 久久国产精品黑丝| 午夜精品一区二区三区电影天堂| 女生裸体视频一区二区三区| 免费成人你懂的| 国产欧美一区二区精品忘忧草| 久久免费国产| 韩国av一区二区三区四区| 亚洲天堂av图片| 一区二区三区国产在线观看| 欧美日韩成人综合| 亚洲电影免费观看高清完整版| 国产在线不卡| 久久精品视频99| 欧美中日韩免费视频| 国产精品美女久久久| 中文久久精品| 亚洲欧美日韩在线播放| 欧美日韩中文字幕在线| 欧美国产日韩精品免费观看| 亚洲大片精品永久免费| 久久久国产精品一区| 欧美第十八页| 91久久线看在观草草青青| 欧美黄色影院| 国模吧视频一区| 久久精品国产999大香线蕉| 欧美一区二区三区在线视频| 国产一区二区日韩| 美女日韩欧美| 久久视频这里只有精品| 亚洲国产日日夜夜| 欧美女同在线视频| 性做久久久久久免费观看欧美| 久久嫩草精品久久久精品一| 亚洲女优在线| 亚洲欧美日韩天堂| 亚洲欧美日韩人成在线播放| 欧美性猛片xxxx免费看久爱| 亚洲伊人久久综合| 久久久国产成人精品| 亚洲精品一级| 先锋影音久久久| 艳女tv在线观看国产一区| 亚洲性视频网站| 亚洲国产精品va在看黑人| 日韩午夜av在线| 亚洲第一精品福利| 亚洲一级网站| 日韩午夜av电影| 久久精品成人一区二区三区| 日韩网站在线看片你懂的| 欧美激情在线| 韩国v欧美v日本v亚洲v| 中日韩午夜理伦电影免费| 亚洲破处大片| 久久久水蜜桃| 久久亚洲一区二区| 国产精品久久久久毛片大屁完整版| 亚洲精品国产精品乱码不99按摩| 校园春色国产精品| 性色av一区二区三区在线观看| 欧美视频三区在线播放| 亚洲美女尤物影院| 在线视频欧美一区| 欧美视频中文一区二区三区在线观看|