我很困惑。
为什么notepad.exe有三个不同的进程ID?
1)间谍++说000000A48(嗯?)
2)任务经理说:2632
3)getWindowThreadProcessID显示:1744
我想2632是setWindowsHookex(作为dwThreadID参数)中使用的正确的一个,但是如果getWindowThreadProcessID返回其他内容,我如何找到正确的一个?
最佳答案
一个进程只有一个唯一的进程ID。但是spy++将该值报告为十六进制,而task manager将其报告为十进制。现在,a48(十六进制)等于2632(十进制)。
另一个值1744是一个线程ID,这是另一个对象的ID。线程和进程不是一回事。进程包含一个或多个线程。
当您调用GetWindowThreadProcessId
时,它返回窗口的线程id作为函数的返回值。第二个参数可用于返回拥有线程的进程的进程ID。这样称呼:
DWORD pid;
DWORD tid = GetWindowThreadProcessId(wnd, &pid);
函数返回后,
pid
包含进程id。您正在尝试安装钩子,需要该钩子的线程ID。在代码中使用变量
npThreadId
。关于c - ProcessID困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16625280/