我想在应用程序中添加一个钩子。我正在使用SetWindowsHookEx
,我可以创建一个系统范围的钩子,但我想为特定的应用程序创建一个钩子。我需要有目标应用程序的线程ID来挂钩它。我知道窗口的标题,我知道exe的名称,从这些我可以获得窗口句柄和进程ID,但我如何获得线程ID?我在c#看到了一篇关于如何做的帖子,但是我没有看到如何在c ++中获得一个线程列表。
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);
谢谢, 亚历山大。
答案 0 :(得分:4)
GetWindowThreadProcessId()
返回线程ID。您错误地将线程ID分配给进程ID变量。而是写:
HWND windowHandle = FindWindow(NULL, _T("SomeOtherApp"));
DWORD threadId = GetWindowThreadProcessId(windowHandle, NULL);
HHOOK hook = ::SetWindowsHookEx(WH_CBT, HookCBTProc, hInst, threadId);
答案 1 :(得分:2)
答案是GetWindowThreadProcessId
。它接受窗口句柄并返回创建窗口的线程的ID以及可选的进程ID。