WH_KEYBOARD_LL掛鉤是否可以在我的應用程序/線程具有焦點時調用掛鉤函數?目前我即使在應用程序未處於活動狀態時也會收到呼叫。WH_KEYBOARD_LL僅在我的進程主線程中掛鉤
0
A
回答
1
您無法安裝掛鉤,也無法應用某種形式的過濾器來抑制它在某些狀態下發射。安裝完成後,它會啓動。
因此,當您的應用程序處於不活動狀態時,您的掛鉤功能中不執行任何操作,或者在應用程序處於非活動狀態時移除掛鉤。或者,徹底取消掛鉤,並對到達消息隊列的消息作出響應。
3
當然,SetWindowsHookEx()的第四個參數可以是一個線程ID,以使其具有選擇性。通過一個你的UI線程,通過調用GetCurrentThreadId()來獲取它。
請注意,這通常不是很有用,您可以輕鬆攔截消息循環中的鍵盤消息。每個GUI類庫都支持這個功能,這是實現快捷鍵操作所必需的。即使是winapi也有這個,TranslateAccelerator()
。強烈建議,調試一個鉤子是非常痛苦的,因爲鉤子回調中的斷點或回調所調用的任何函數都會導致鍵盤佔用達5秒,並且鉤子被破壞。
相關問題
- 1. 在掛鉤程序中訪問掛鉤
- 2. 從WH_KEYBOARD_LL鉤
- 3. 掛鉤線程退出
- 4. 單進程掛鉤函數
- 5. 掛鉤到窗口進程
- 6. 即使使用線程,啓動進程會掛起主進程
- 7. DirectX設備的線程安全掛鉤
- 8. 100%的Java進程掛鉤CPU
- 9. 線程安全掛鉤功能
- 10. 在C#中掛起主進程#
- 11. 掛鉤到另一個終端進程?
- 12. 掛鉤我的應用程序
- 13. Deviarev2鉤API:掛鉤到現有的進程winapi調用?
- 14. C#掛鉤Windows進程檢查調試進程
- 15. 問題的過程掛鉤
- 16. 與Moles在另一個進程中掛鉤的方法
- 17. 進程掛起在父進程中C
- 18. 在當前進程中掛鉤API調用?
- 19. 在Windows中掛鉤所有新進程和命令行參數
- 20. 掛鉤Eclipse構建過程?
- 21. Git - 遠程激活掛鉤?
- 22. 掛鉤過程最後
- 23. 掛鉤Roslyn構建過程
- 24. Ruby Tracepoint - 將掛鉤掛接到open3子進程
- 25. 創建方法的操作掛鉤或遠程掛鉤
- 26. Time.sleep似乎阻止主線程,而不僅僅是子線程?
- 27. 在applet中掛起線程
- 28. 線程掛在WifiManager.enableNetwork()
- 29. 如何掛鉤到Eclipse中的Workspace-startup進程?
- 30. 如何訪問Mercurial進程內掛鉤中的提交消息?
爲什麼使用鉤子?當你的應用程序具有焦點時,鍵盤事件將傳遞到消息循環中。 – 2014-10-10 12:38:01
因爲我希望我的代碼可重用,並且能夠在純WinAPI或Qt/Gtk +應用程序中使用它時攔截鍵盤。 – 2014-10-10 12:41:34
它影響的全球化程度越低,它的可重用性就越高。是的,您可能需要在消息循環中添加一些消息預覽功能; Qt已經沒有這個了嗎? (您也可以查看.NET的['Application.AddMessageFilter'](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.addmessagefilter.aspx)以獲得合理的設計) – 2014-10-10 12:47:09