QQ截圖的自動選框,碰見一個bug,一直沒有找到解決方案
我現在的做的截圖原理如下:移動滑鼠時,根據坐標,獲取表單句柄,然后根據句柄再獲取表單區域大小
但是,因為桌面最上方的表單句柄,就是本身的截屏表單,win32 api ChildWindowFromPointEx 無法過濾具體某個表單句柄(也可能自己沒找到),但能過濾禁用或隱藏的表單,所以當前表單要設定Enable=fase,不過這樣無法觸發,MouseMove事件,所以要加個滑鼠鉤子,這樣可以實作與QQ截圖一樣的效果,這個方案百度有原始碼
但是現在出現的問題:滑鼠鉤子有些電腦上會出現問題,例如無法觸發移動滑鼠事件時,因為表單被禁用,無法關閉表單(alt+f4)和無法操作表單,導致實際效果,就是無反應,會卡死,因為置頂的表單,客戶只有重啟電腦才能解決
后來想換第二種方案,不想用滑鼠鉤子,于是打算截圖時,先獲取桌面下所有表單的句柄和區域,然后MouseMove的時候,判斷坐標點是否再區域內
但無法獲取表單句柄的Z順序,無法分清前后,導致可能選中區域,可能是一個最大化表單的后面的小表單
兩個無法解決的問題
1.如何根據坐標獲取桌面上的表單句柄時,過濾掉當前表單或最頂層表單
2.獲取桌面所有表單句柄時,能獲取Z順序資訊
我用過的win32Api ,未找到解決方案,如下
GetDesktopWindow
GetWindow
GetNextWindow
GetTopWindow
GetParent
EnumWindows
ChildWindowFromPointEx
ScreenToClient
IsWindowVisible
IsWindowEnabled
GetWindowRect
大家有沒有不用滑鼠鉤子的思路,推薦一下,謝謝
uj5u.com熱心網友回復:
下面 CSDN智能推薦的文章就沒有參考價值?他提供的包中的可執行檔案,在64位 win10 中可直接運行,雖然效果不十分滿意,但也并無差錯轉載請註明出處,本文鏈接:https://www.uj5u.com/net/284355.html
標籤:C#
