2011-05-07 47 views
6

我想添加一個鉤子到應用程序。我正在使用SetWindowsHookEx,我可以創建一個系統範圍的鉤子,但是我想爲特定的應用程序創建一個鉤子。我需要有目標應用程序的線程ID掛鉤它。我知道窗口的標題,我知道exe名稱,從這些我可以得到窗口句柄和進程ID,但我如何獲得線程ID?我看到一篇關於如何在c#中完成的文章,但我看不到如何獲得C++中的線程列表。C++掛鉤到不同的應用程序,如何從進程ID找到線程ID?

HWND windowHandle = FindWindow(NULL, _T("SomeOtherApp")); 
DWORD processId = GetWindowThreadProcessId(windowHandle, NULL); 
DWORD threadId = ??? // How do I get thread id here? 
HHOOK hook = ::SetWindowsHookEx(WH_CBT, HookCBTProc, hInst, threadId); 

謝謝, 亞歷山大。

回答

4

GetWindowThreadProcessId()返回線程ID。您錯誤地將線程ID分配給進程ID變量。反而寫:

HWND windowHandle = FindWindow(NULL, _T("SomeOtherApp")); 
DWORD threadId = GetWindowThreadProcessId(windowHandle, NULL); 
HHOOK hook = ::SetWindowsHookEx(WH_CBT, HookCBTProc, hInst, threadId); 
+0

謝謝。我過於複雜的事情。 – sjcomp 2011-05-10 00:42:59

2

答案是GetWindowThreadProcessId。它需要窗口句柄並返回創建該窗口的線程的ID以及可選的進程ID。

+0

沒錯。感謝您指出它。我已經糾正了答案。 – 2011-05-07 18:25:41

+0

感謝您的回覆。 – sjcomp 2011-05-10 00:43:08

相關問題