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


最近工作中遇到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>
            欧美日韩视频在线| 亚洲一区二区三区四区中文 | aa级大片欧美三级| 国产日韩欧美综合在线| 国产主播喷水一区二区| 久久三级福利| 亚洲在线国产日韩欧美| 影院欧美亚洲| 欧美日韩成人免费| 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美日韩国产| 亚洲欧美日本视频在线观看| 国产精品久久久91| 亚洲欧美日韩国产一区二区三区| 99精品国产热久久91蜜凸| 亚洲一区二区精品视频| 欧美韩国一区| 欧美日韩免费一区二区三区| 欧美大胆a视频| 欧美日韩三区| 一区二区三区在线免费观看| 美女诱惑黄网站一区| 久久福利毛片| 欧美1区2区视频| 亚洲综合第一| 国产精品视频免费观看| 久久午夜电影| 亚洲少妇诱惑| 亚洲欧美中日韩| 国产精品久久久久三级| 欧美激情在线播放| 午夜视频一区在线观看| 免费日韩av片| 亚洲精品一区在线观看香蕉| 老司机午夜精品视频在线观看| 国产性做久久久久久| 国产精品九九久久久久久久| 亚洲国产小视频在线观看| 免费一级欧美片在线观看| 国产美女精品免费电影| 久久爱www.| 国产欧美日韩在线观看| 亚洲伊人一本大道中文字幕| 久久av一区二区三区漫画| 黑丝一区二区| 亚洲视频一区在线观看| 久久精品五月婷婷| 欧美黄色大片网站| 亚洲影院色无极综合| 国产主播精品| 99国产精品99久久久久久| 欧美日韩一区二区在线观看| 国产精品国色综合久久| 久久国产精品99国产| 一区二区自拍| 一本一本久久a久久精品牛牛影视| 国产一区二区三区在线观看视频 | 欧美一区二区日韩| 午夜精品久久久久久久99樱桃| 欧美一区二区三区另类| 久久精品盗摄| 久久米奇亚洲| 国产亚洲a∨片在线观看| 亚洲黄页视频免费观看| 麻豆精品一区二区综合av| 一区二区国产在线观看| 欧美福利网址| 国产欧美日韩亚洲| 亚洲一区二区三区在线播放| 欧美ed2k| 久久综合九色| 亚洲精品精选| 一区二区高清在线| 国产欧美在线观看一区| 欧美国产成人精品| 噜噜噜噜噜久久久久久91| 国产精品久久久久久超碰 | 亚洲国产1区| 欧美精品在欧美一区二区少妇| 亚洲免费在线视频一区 二区| 国产伦理一区| 欧美成在线视频| 欧美夜福利tv在线| 一本色道久久综合一区| 国产一区91| 久久久777| 99精品视频免费全部在线| 欧美成人第一页| 老牛国产精品一区的观看方式| 午夜久久黄色| 国产精品视频福利| 欧美激情综合色| 久久久91精品国产| 久久夜色精品国产| 欧美一区二视频| 久久国产精品72免费观看| 亚洲国产视频一区二区| 国产精品视频不卡| 欧美激情一区在线观看| 麻豆精品一区二区av白丝在线| 亚洲宅男天堂在线观看无病毒| 欧美一区二区三区四区视频| 亚洲久久视频| 蜜臀久久99精品久久久画质超高清| 欧美激情一区三区| 欧美刺激性大交免费视频| 国产精品每日更新| 亚洲久久一区二区| 亚洲国产综合视频在线观看| 亚洲在线免费观看| 久久国产精品一区二区| 欧美影院在线| 亚洲精选一区| 久久超碰97中文字幕| 久久亚洲国产成人| 日韩午夜在线播放| 亚洲风情在线资源站| 日韩亚洲国产欧美| 亚洲女人天堂成人av在线| 久久另类ts人妖一区二区| 欧美14一18处毛片| 最新日韩中文字幕| 久久精品一区蜜桃臀影院 | 国产精品视频自拍| 香蕉av福利精品导航| 欧美福利一区二区| 亚洲国产精品第一区二区| 另类图片综合电影| 亚洲天堂偷拍| 欧美精品激情在线| 亚洲人精品午夜| 欧美高清视频www夜色资源网| 欧美日韩另类字幕中文| 在线成人免费视频| 六月天综合网| 欧美精品福利| 国语自产精品视频在线看一大j8| 最新亚洲一区| 亚洲主播在线观看| 国产精品海角社区在线观看| 亚洲——在线| 日韩小视频在线观看| 在线看欧美日韩| 裸体一区二区三区| 欧美成人日本| 老司机午夜精品| 亚洲性视频h| 欧美一区二区免费| 亚洲国产美女| 亚洲欧美国产精品桃花| 日韩视频在线观看一区二区| 伊人久久噜噜噜躁狠狠躁| 亚洲黄色免费网站| 国产一区二区三区日韩| 久久se精品一区二区| 欧美精品www在线观看| 亚洲午夜精品视频| 久久超碰97中文字幕| 亚洲欧美在线一区| 国产精品多人| 制服丝袜亚洲播放| 在线观看日韩一区| 亚洲一区二区精品| 亚洲欧美久久久久一区二区三区| 国产精品美女久久久久aⅴ国产馆| 久久亚洲欧洲| 韩国成人福利片在线播放| 欧美一级专区| aⅴ色国产欧美| 欧美日韩在线视频一区二区| 久久成人精品无人区| 亚洲成人资源| 欧美大片免费观看| 亚洲精品男同| 一区二区三区四区五区在线 | 9色porny自拍视频一区二区| 99这里只有久久精品视频| 亚洲一区二区影院| 国产又爽又黄的激情精品视频| 久久青草欧美一区二区三区| 亚洲国产经典视频| 精品动漫3d一区二区三区| 久久超碰97中文字幕| 欧美韩日精品| 亚洲精品国精品久久99热| 性色av一区二区三区| 亚洲高清不卡在线| 麻豆精品视频在线| 国内成+人亚洲+欧美+综合在线| 中文国产成人精品| 一区免费视频| 国产小视频国产精品| 国产日韩欧美在线播放| 亚洲人成人77777线观看| 亚洲欧美中文在线视频| 激情视频一区二区三区| 欧美日韩综合久久| 欧美成在线观看| 亚洲国产成人精品女人久久久| 国产精品一二|