1
有沒有一種方法來鉤住一個特定的Windows消息,而無需繼承窗口。如何在沒有子類的情況下爲特定的Windows消息掛鉤?
有WH_GETMESSAGE,但似乎造成性能問題。
除了這些不會影響性能的其他解決方案嗎?
有沒有一種方法來鉤住一個特定的Windows消息,而無需繼承窗口。如何在沒有子類的情況下爲特定的Windows消息掛鉤?
有WH_GETMESSAGE,但似乎造成性能問題。
除了這些不會影響性能的其他解決方案嗎?
AFAIK沒有比您提到的更好的解決方案。當然,子類化窗口比鉤住線程的所有消息要好。
我們認爲,直到它通過窗口處理的消息通過了哪條路徑:
PostMessage
/SendMessage
或暗示。GetMessage
或類似的方法),然後調用DispatchMessage
。CallWindowProc
(或類似的)。CallWindowProc
標識與窗口相關聯的窗口procedore(經由GetClassLong
/GetWindowLong
)子類化 - 意味着替換目標窗口的窗口過程。這似乎是最好的變體。 使用WH_GETMESSAGE
標誌安裝掛鉤將監視發佈到消息隊列的所有消息。這是不好的,因爲以下原因:
DispatchMessage
)。因此,子類似乎好多了。
還有一個解決辦法 - 如果您的具體消息發佈(而不是發送),你可以重寫消息循環,併爲每一個檢索到的消息,你可能會做一些前/後處理