c - ProcessID困惑

标签 c windows winapi

我很困惑。

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

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

2)任务管理器说:2632

3)GetWindowThreadProcessId 说:1744

enter image description here

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

最佳答案

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

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

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

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

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

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

关于c - ProcessID困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625280/

相关文章:

CS50 pset1 贪婪挑战

c - 用户在 C 中的结构中输入?

javascript - Javascript中的C解析器

c++ - 如何检查用户是否在 win32 中具有本地管理员权限

c++在win32学校应用程序上构建错误

multithreading - WaitForSingleObject 返回 WAIT_OBJECT_0 但未调用 SetEvent

c - 在 C 中终止一个线程

c++ - 跨平台方式获取用户友好的文件类型描述

python - 使用 Python 进行 GPG 解密(作为 Windows 服务)

python - 如何在 Windows 中运行使用 pip 安装的程序?