ProcessID混乱

时间:2013-05-18 14:19:13

标签: c windows winapi

我很困惑。

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

1)Spy ++说 000000A48 (嗯?)

2)Taskmanager说: 2632

3)GetWindowThreadProcessId说: 1744

enter image description here

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

1 个答案:

答案 0 :(得分:7)

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

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

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

DWORD pid;
DWORD tid = GetWindowThreadProcessId(wnd, &pid);

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

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