我很困惑。
为什么 notepad.exe 有三个不同的进程 ID?
1)间谍++说000000A48(嗯?)
2)任务管理器说:2632
3)GetWindowThreadProcessId 说:1744
我想 2632 是在 SetWindowsHookEx 中使用的正确的(作为 dwThreadId 参数),但是如果 GetWindowThreadProcessId 返回其他内容,我该如何找到正确的?
一个进程只有一个唯一的进程 ID。但 Spy++ 将值报告为十六进制,任务管理器将其报告为十进制。现在,A48(十六进制)等于 2632(十进制)。
另一个值 1744 是线程 ID。那是不同对象的 ID。线程和进程不是一回事。一个进程包含一个或多个线程。
当您调用GetWindowThreadProcessId
它时,它会返回窗口的线程 ID 作为函数的返回值。第二个参数可用于返回拥有线程的进程的进程 ID。像这样称呼它:
DWORD pid;
DWORD tid = GetWindowThreadProcessId(wnd, &pid);
函数返回后,pid
包含进程ID。
您正在尝试安装一个钩子并且需要一个线程 ID。在您的代码中使用变量npThreadId
.