我想向应用程序添加一个挂钩。我正在使用SetWindowsHookEx,可以创建系统范围的钩子(Hook),但是我想为特定的应用程序创建钩子(Hook)。我需要具有目标应用程序的线程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);
谢谢,
亚历山大

最佳答案

GetWindowThreadProcessId()返回线程IF。您正在错误地将线程ID分配给进程ID变量。而是写:

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

07-24 22:29