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


最近工作中遇到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>
            久久精品成人| 久久精品国产999大香线蕉| 亚洲婷婷综合久久一本伊一区| 亚洲激情在线| 欧美三区美女| 久久综合999| 亚洲另类在线一区| 国产精品久久久久久久久婷婷 | 136国产福利精品导航| 欧美午夜精品久久久久久超碰| 久久久久久网址| 香蕉av福利精品导航| 亚洲最新在线| 欧美一区二区在线观看| 国产亚洲午夜| 国产一区二区三区四区| 国产一区二区三区在线观看精品| 国产精品免费网站在线观看| 午夜在线视频观看日韩17c| 亚洲一区二区不卡免费| 亚洲欧美日韩精品久久| 亚洲欧美日韩中文视频| 午夜亚洲精品| 另类春色校园亚洲| 免费的成人av| 欧美精品七区| 国产精品美女久久久浪潮软件| 国产精品久久久久久av下载红粉| 国产精品久久久久久久浪潮网站| 国产精品igao视频网网址不卡日韩| 欧美日韩四区| 欧美午夜剧场| 牛人盗摄一区二区三区视频| 欧美+亚洲+精品+三区| 欧美母乳在线| 国产精品久久久久aaaa| 激情五月综合色婷婷一区二区| 亚洲午夜精品17c| 亚洲午夜国产成人av电影男同| 亚洲国产日韩一区二区| 亚洲日本在线视频观看| 欧美黄色小视频| 美日韩精品视频| 亚洲国产毛片完整版| 亚洲精品一区中文| 欧美一级一区| 欧美精品一区二区三区视频| 久久久久国产一区二区| 欧美激情精品久久久久久蜜臀 | 欧美大片在线看免费观看| 亚洲日本成人网| 欧美亚洲在线视频| 欧美成人激情视频免费观看| 欧美天堂在线观看| 国产日韩欧美综合一区| 亚洲国产视频a| 一区二区三区四区在线| 亚洲欧美视频一区二区三区| 久久人人97超碰国产公开结果| 久久精品视频网| 亚洲精选中文字幕| 久久精品国产亚洲精品| 欧美日韩国产va另类| 一区在线观看| 亚洲视频在线播放| 久久久中精品2020中文| 亚洲伦理在线免费看| 久久久久久夜精品精品免费| 久久本道综合色狠狠五月| 欧美手机在线视频| 国产一区二区你懂的| 亚洲天堂网站在线观看视频| 免费观看日韩av| 午夜精品视频在线观看一区二区 | 亚洲中午字幕| 最新国产精品拍自在线播放| 久久久国产亚洲精品| 精品电影在线观看| 你懂的视频欧美| 免费在线观看日韩欧美| 亚洲精品乱码久久久久久蜜桃91 | 亚洲国产日韩一区| 欧美黄网免费在线观看| 欧美精品一区在线播放| 亚洲一区二区视频| 久久久91精品国产一区二区精品| 亚洲男人av电影| 国产在线播放一区二区三区| 欧美成人精品一区| 欧美午夜a级限制福利片| 欧美一级成年大片在线观看| 久久国产精品久久国产精品| 亚洲欧洲一区二区在线播放| 宅男噜噜噜66一区二区| 一区二区三区在线视频观看| 亚洲人成人99网站| 国产人成一区二区三区影院| 亚洲第一色中文字幕| 欧美性jizz18性欧美| 免费成人激情视频| 欧美日韩系列| 欧美成人一区二区三区在线观看| 欧美三级电影网| 欧美成年人视频网站| 国产精品你懂的在线| 欧美电影免费观看| 国产精品亚洲综合| 亚洲国产精品成人va在线观看| 欧美午夜精品久久久| 欧美激情精品久久久久久免费印度| 国产精品高潮呻吟久久av无限| 亚洲二区免费| 国产日韩在线视频| 亚洲经典视频在线观看| 国产日韩精品视频一区二区三区| 欧美成人影音| 国产精品视频免费观看| 欧美国产日韩免费| 国产一区二区毛片| 亚洲一区二区三区精品视频| 亚洲精品影视| 麻豆久久精品| 裸体一区二区| 国产一区二区黄| 亚洲在线观看免费| 一区二区三区波多野结衣在线观看| 久久久久亚洲综合| 久久福利资源站| 国产精品国产三级国产| 亚洲伦理自拍| 在线亚洲欧美视频| 欧美极品在线视频| 欧美成人a视频| 在线免费观看欧美| 久久久爽爽爽美女图片| 久久久国产成人精品| 国产精品看片你懂得| 99精品国产在热久久| 亚洲天堂成人在线观看| 欧美黄色影院| 亚洲美女毛片| 亚洲午夜视频在线观看| 欧美日韩中国免费专区在线看| 亚洲精品资源美女情侣酒店| av不卡在线看| 国产精品久久久久77777| 亚洲视频在线观看免费| 亚洲欧美国产高清| 国产伦精品一区二区三区四区免费 | 欧美中文字幕在线观看| 国产精品一区在线观看你懂的| 亚洲午夜精品久久久久久app| 亚洲欧美春色| 韩日精品视频一区| 老司机午夜精品视频在线观看| 欧美刺激性大交免费视频| 最新国产拍偷乱拍精品| 欧美日韩精品不卡| 亚洲一品av免费观看| 久久精品视频导航| 在线观看国产一区二区| 欧美激情综合在线| 午夜精品在线视频| 欧美99在线视频观看| 一区二区精品国产| 国产女主播在线一区二区| 久久久噜噜噜久久久| 亚洲国产影院| 国产美女诱惑一区二区| 久久久久免费视频| 99亚洲一区二区| 久久亚洲精选| 在线视频免费在线观看一区二区| 国产精品久久久久久久浪潮网站| 久久精品99国产精品酒店日本| 亚洲第一搞黄网站| 午夜精品久久久久久久久久久久久| 亚洲一二三四久久| 欧美亚洲第一页| 久久免费高清| 亚洲精品久久久蜜桃| 欧美自拍偷拍| 一区二区三区高清视频在线观看| 国产乱子伦一区二区三区国色天香| 久久九九精品| 一本久道久久综合中文字幕| 乱人伦精品视频在线观看| 亚洲私人影吧| 亚洲国产清纯| 国产网站欧美日韩免费精品在线观看 | 日韩一级二级三级| 老巨人导航500精品| 一区二区三区 在线观看视| 国产在线精品成人一区二区三区| 欧美日本一区二区视频在线观看| 久久精品国产清高在天天线| 中文在线资源观看网站视频免费不卡 | 在线看片成人| 国产一区二区三区黄视频| 欧美色区777第一页|