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


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



在XP時代我們的程序沒有響應后只能通過任務管理器強制殺掉,但是Vista之后情況變了, 我們?nèi)匀豢梢酝蟿邮ロ憫拇翱冢踔量梢試L試最小化和關閉窗口, 我們把這個特性叫住Window Ghosting。

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

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

這是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.
簡單來說就是程序在非等待輸入狀態(tài) ,不是在程序啟動階段, 并且5秒內(nèi)沒有從消息隊列中取消息。 

下面我們思考系統(tǒng)是如何實現(xiàn)Window Ghosting的?

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

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

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

我遇到的問題是我們在枚舉窗口的過程中,我們通過GetWindowRect查詢一個失去響應的程序窗口的位置,但是返回結(jié)果卻和我們屏幕上看到的不一致, 因為我們看到的是被我們拖動過的Ghosting window,但是API返回的確是被hide的原窗口的位置。 這種情況下我們需要原窗口和Ghosting窗口的一張映射表, 但是我還沒有找到他們對應關系的方法, 不知道系統(tǒng)又沒有相關API提供?一種方法是通過查找類名是"Ghost"的窗口,判斷進程是不是dwm.exe, 再通過標題匹配。但是該方法效率低,也不可靠。
posted on 2014-01-08 21:26 Richard Wei 閱讀(3258) 評論(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是很早就知道了,感覺有遮罩層的意思,方便接管消息做統(tǒng)一的假死處理。  回復  更多評論
  
# re: Window Ghosting
2014-01-09 10:24 | Richard Wei
@萬連文
對假死窗口調(diào)用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>
            午夜精品亚洲一区二区三区嫩草| 欧美第一黄网免费网站| 久久国产精品一区二区三区四区| 国产欧美高清| 久久亚洲一区二区| 亚洲人成人99网站| 亚洲欧美日韩精品久久久久| 国产亚洲一区在线| 欧美不卡视频一区发布| 日韩视频在线播放| 久久国产黑丝| 亚洲日本成人网| 国产精品久久二区| 久久国产一区| 亚洲精品小视频| 久久精品国产99国产精品澳门| 一区二区三区在线观看视频| 欧美激情视频给我| 欧美一区二区成人| 亚洲国产欧美精品| 午夜精品久久久久久| 在线日韩中文| 国产精品一区二区三区成人| 美女任你摸久久| 亚洲欧美久久久久一区二区三区| 亚洲第一精品电影| 久久成人久久爱| 一区二区电影免费观看| 国产一区二区三区在线观看视频| 欧美日本一区| 久久久久久久综合日本| 亚洲一区三区在线观看| 亚洲国产精品免费| 久久久综合视频| 亚洲欧美在线视频观看| 亚洲精品国产欧美| 国产亚洲精品aa午夜观看| 欧美激情在线| 久久亚洲欧美| 久久国产婷婷国产香蕉| 亚洲一区欧美二区| 亚洲美女在线一区| 欧美成人免费全部观看天天性色| 欧美尤物一区| 亚洲在线观看视频网站| 99精品国产在热久久婷婷| 影音先锋另类| 韩国欧美国产1区| 国产精品亚洲片夜色在线| 欧美日韩一区二区三区在线看| 久久综合伊人77777尤物| 欧美亚洲在线视频| 亚洲在线免费视频| 夜夜嗨av一区二区三区四季av| 亚洲国产欧美一区| 欧美国产日韩精品免费观看| 久久综合色影院| 久久一区亚洲| 久久一区国产| 免费黄网站欧美| 另类天堂av| 免费亚洲电影在线| 欧美aaa级| 欧美大片91| 欧美激情在线播放| 亚洲第一天堂av| 亚洲国产一区二区a毛片| 亚洲福利视频网站| 亚洲夫妻自拍| 亚洲人成77777在线观看网| 亚洲福利一区| 亚洲精品美女在线观看| 亚洲狼人精品一区二区三区| 亚洲精品国精品久久99热一| 亚洲精品国偷自产在线99热| 亚洲毛片在线观看| 在线视频精品| 中日韩男男gay无套| 午夜国产精品视频| 久久xxxx| 欧美成人国产| 欧美日韩综合另类| 国产精品在线看| 黄色精品在线看| 亚洲欧洲综合另类在线| 一本大道久久精品懂色aⅴ| 亚洲视频一区二区在线观看 | 国产亚洲va综合人人澡精品| 国产一区二区久久精品| 一区一区视频| 日韩视频一区二区| 亚洲欧美日韩精品久久久久| 久久av一区| 欧美激情在线免费观看| 在线视频精品一| 久久狠狠一本精品综合网| 欧美aⅴ一区二区三区视频| 欧美日本在线一区| 国产美女精品免费电影| 狠狠色综合网| 99精品欧美一区| 久久gogo国模啪啪人体图| 蘑菇福利视频一区播放| 99国产精品久久久| 久久九九免费视频| 欧美日韩蜜桃| 激情久久五月天| 一区二区91| 久久久久久久综合| 亚洲精品乱码久久久久久| 香蕉尹人综合在线观看| 免费黄网站欧美| 国产精品系列在线| 亚洲精品欧美专区| 久久精品亚洲乱码伦伦中文| 亚洲激情一区二区| 欧美中文在线视频| 欧美视频一区二区三区在线观看 | 欧美激情亚洲激情| 亚洲综合好骚| 欧美日韩播放| 樱桃视频在线观看一区| 午夜电影亚洲| 亚洲国产乱码最新视频| 久久精品99国产精品日本| 欧美三区美女| 亚洲精品乱码| 久久另类ts人妖一区二区| 中国女人久久久| 欧美黄色大片网站| 精品不卡一区二区三区| 亚洲欧美日韩网| 亚洲精品一二三区| 女人色偷偷aa久久天堂| 国产一区二区三区高清| 亚洲欧美日韩另类精品一区二区三区| 欧美激情第4页| 久久久久久久高潮| 国产日韩av高清| 亚洲综合视频一区| 亚洲精品一区二区三区av| 久久综合影视| 在线成人免费观看| 久久婷婷人人澡人人喊人人爽 | 欧美日韩免费网站| 亚洲七七久久综合桃花剧情介绍| 久久久久久91香蕉国产| 午夜一区二区三区不卡视频| 国产精品美女一区二区| 亚洲香蕉成视频在线观看| 亚洲精品久久久久| 欧美国产视频日韩| 亚洲精品国产视频| 亚洲黄色毛片| 欧美国产免费| 日韩亚洲成人av在线| 欧美黄色一级视频| 嫩草国产精品入口| 亚洲精品在线二区| 亚洲日本成人网| 欧美日韩hd| 亚洲中字在线| 亚洲一区二区免费看| 国产精品亚洲一区二区三区在线| 午夜精品久久久久久久99樱桃| 亚洲视频免费| 国产免费观看久久| 久久免费一区| 免费日韩av| 亚洲视频精品在线| 亚洲性图久久| 国产一区二区三区四区三区四 | 国产亚洲在线观看| 久久亚洲国产成人| 另类图片国产| 9久草视频在线视频精品| 99视频在线精品国自产拍免费观看| 欧美午夜精品伦理| 校园激情久久| 久久久久国产一区二区三区| 亚洲国产一区二区三区青草影视 | 国产日产亚洲精品| 美国成人毛片| 欧美精品亚洲| 欧美在线观看你懂的| 久久精品一区蜜桃臀影院 | 一本久久综合亚洲鲁鲁五月天| 99热这里只有精品8| 国产欧美婷婷中文| 欧美高清不卡在线| 欧美天天在线| 久久亚洲精品一区| 欧美精品久久久久久| 小黄鸭精品密入口导航| 久久久噜噜噜久久人人看| 一卡二卡3卡四卡高清精品视频| 亚洲欧美三级伦理| 亚洲毛片av在线| 欧美一区二区三区视频免费| 亚洲精品美女91|