2009-11-24 61 views
0

我在應用程序中鉤住鍵盤。要求是在進程中的所有線程中鉤住鍵盤。無法爲進程中的所有線程安裝鉤子

我用SetWindowsHookEx函數API

SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0); 

鉤一種用於在過程中的所有線程創建的。 這工作正常,直到調用線程存在。一旦調用線程終止鉤停止工作。

有什麼辦法掛鉤進程而不是進程中的線程。

回答

1

在SDK文檔的LowLevelKeyboardProc這小字是至關重要的:

這個鉤子被稱爲在安裝它的線程的上下文。該調用是通過向安裝該鉤子的線程發送消息來完成的。因此,安裝該鉤子的線程必須有一個消息循環。

換句話說,你必須保持線程活着,線程必須泵送消息循環。你現在看到的行爲完全是由設計。

0

按照MSDN,WH__KEYBOARD___LL適用於全球,而不是特定於應用程序。

如果您想爲進程特定的線程安裝鉤子,請使用WH___KEYBOARD

+0

它不是關於全局或應用specific.Isue是,當調用線程終止時,掛鉤也終止。 – anand 2009-11-24 10:23:00

+0

你說得對,我已經在ms excel中注入了鉤子dll,並且我已經通過指定主應用程序窗口的threadId來安裝鉤子,該應用程序窗口只在應用程序退出並且工作正常時終止。 – Ashish 2009-11-24 11:13:15

0

只需在主要功能中安裝掛鉤。如果只有在特定線程運行時才需要它,則可以使用易失性標誌。