我想向应用程序添加一个挂钩。我正在使用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);