ProcessID混乱

The*_*sen 1 c windows winapi

我糊涂了.

为什么notepad.exe有三个不同的进程ID?

1)间谍++说000000A48(嗯?)

2)Taskmanager说:2632

3)GetWindowThreadProcessId说:1744

在此输入图像描述

我猜2632是在SetWindowsHookEx中使用的正确的(作为dwThreadId参数),但如果GetWindowThreadProcessId返回其他内容,我该如何找到正确的?

Dav*_*nan 7

进程只有一个唯一的进程ID.但是Spy ++将值报告为十六进制,任务管理器将其报告为十进制.现在,A48(十六进制)等于2632(十进制).

另一个值1744是一个线程ID.这是另一个对象的ID.线程和进程不是一回事.进程包含一个或多个线程.

当你调用GetWindowThreadProcessId它时,返回窗口的线程ID作为函数的返回值.第二个参数可用于返回拥有该线程的进程的进程ID.像这样称呼它:

DWORD pid;
DWORD tid = GetWindowThreadProcessId(wnd, &pid);
Run Code Online (Sandbox Code Playgroud)

函数返回后,pid包含进程ID.

您正在尝试安装一个钩子并需要一个线程ID.在您的代码中使用变量npThreadId.