c - 我怎样才能在 C 中获得一个进程句柄而不是它的名字?

标签 c windows winapi

我正在 Windows XP 上编写程序,试图获取 calc.exe 的进程句柄。我可以假设用户确实运行了 calc.exe,但他可能更改了文件名。

即使名称已更改,是否有一个名称可以获取 calc.exe 进程的句柄?

我找到了这个答案,但它不处理顽皮用户更改名称(例如更改为 calc_new.exe)的情况:

How can I get a process handle by its name in C++?

我可以使用 Win32 进程的一些其他属性来查找句柄吗?

最佳答案

您可以使用以下 Win32 API 调用序列执行此操作:

  1. 使用 Spy++ 或类似工具找到您定位的顶级窗口的类名。
  2. 调用 FindWindowEnumWindows 查找具有该类名的顶级窗口。
  3. 调用 GetWindowThreadProcessId 找到每个感兴趣的窗口的进程 ID。
  4. 调用 OpenProcess 传递进程 ID 以获取进程句柄。

关于c - 我怎样才能在 C 中获得一个进程句柄而不是它的名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479944/

相关文章:

c - 如何将两个 __m128 值合并为 __m256?

c - 带有字符串变量的 fopen 失败

windows - 如何将Win2K3改造为工作站开发操作系统?

python - 通过远程 Active Directory 单点登录到 Django 站点

winapi - GDI函数GetFontData如何知道哪种字体?

c - C 中的感知器无法训练

c - 在运行时初始化全局二维 C 整数数组

windows - MobaXterm 中的重命名选项卡用于 session 持续时间

c++ - 为什么 CreateWindow() 函数需要 WindowClass 的名称成员而不是指向类本身的指针?

c - 队列弹出一些垃圾值