【发布时间】:2011-06-04 00:11:52
【问题描述】:
我正在用 c++ 在 win7 平台上编写一个需要关闭另一个应用程序的应用程序。 我使用的步骤是:
- 使用 EnumProcess() 枚举所有进程。
- 用 OpenProcess() 打开一个进程句柄。访问权限为 PROCESS_ALL_ACCESS|PROCESS_VM_READ。
- 然后用 EnumProcessModules() 枚举进程模块
- 我使用 GetModuleBaseName() 提取模块名称并将其与我拥有的进程名称进行比较。
- 找到匹配项后,我使用 TerminateProcess() 终止进程。
我面临的问题是这适用于 WindowsXP,但不适用于 Windows 7(64 位)。使用 getlasterror(), 我收到错误为“拒绝访问”。我想这与访问权限有关。 有什么办法可以在两个平台上做到这一点?或者有没有专门针对win7的API?
【问题讨论】:
-
我想您已经排除了向其他应用程序发送
WM_QUITmessage 的可能性? -
或WM_CLOSE到主窗口?
-
嘿嘿,改了权限,又调试了一番,终于找到问题所在了。似乎 EnumProcessModules 失败了,因为我试图从 32 位进程中枚举 64 位进程的模块。错误代码是 299。我需要 EnumProcessModules 以独立于平台的方式(win7/winxp 等,仅 windows)查找具有给定名称的进程的 pid。除了使用系统命令之外,我什么也找不到。是的,我尝试了 WM_QUIT,但问题仍然存在。我无法找到具有给定名称的进程的 pid。
标签: windows-7 windows-xp process windows-7-x64