【问题标题】:c++ hooking to a different application, how to find thread id from process id?c ++挂钩到不同的应用程序,如何从进程ID中找到线程ID?
【发布时间】:2011-08-20 19:17:53
【问题描述】:

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

谢谢, 亚历山大。

【问题讨论】:

    标签: c++ windows multithreading hook


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我把事情复杂化了。
    【解决方案2】:

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

    【讨论】:

    • 没错。谢谢你指点。我已经更正了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多