C++钩取其他应用程序,如何从进程ID查找线程ID?

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

感谢您,Alexander。
2个回答

4

GetWindowThreadProcessId() 返回线程ID。你错误地将线程ID分配给了进程ID变量。改为写成:

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

谢谢。我把事情想复杂了。 - sjcomp

2
答案是GetWindowThreadProcessId。它接受窗口句柄并返回创建该窗口的线程ID和可选的进程ID。

没错。谢谢你指出来。我已经更正了答案。 - Marius Bancila

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接