我正在用win7平台上的C++编写一个应用程序,它需要关闭另一个应用程序。 我使用的步骤是:TerminateProcess在Windows 7中不起作用
- 使用EnumProcess()枚举所有进程。
- 使用OpenProcess()打开进程句柄。访问权限为PROCESS_ALL_ACCESS | PROCESS_VM_READ。
- 然后使用EnumProcessModules()枚举进程模块()
- 我使用GetModuleBaseName()提取模块名称,并将其与我拥有的进程名称进行比较。
- 当我找到匹配项时,我使用TerminateProcess()来终止进程。
我面对的问题是这个工程在WindowsXP中,但不是在Windows 7(64位)。使用getlasterror(), 我得到错误为“拒绝访问”。我想这与访问权限有关。 有没有什么办法可以在两个平台上做到这一点?还是有一个特定于win7的API?
我想你已经排除了简单地发送一个['WM_QUIT'消息](http://msdn.microsoft.com/en-us/library/ms632641的可能性。 aspx)到其他应用程序? – 2011-01-05 13:16:21
或WM_CLOSE到主窗口? – 2011-01-05 18:18:44
嘿,在更改权限和更多调试后,我终于找出问题所在。看来,EnumProcessModules失败,因为我试图从32位进程枚举64位进程的模块。错误代码是299.我需要EnumProcessModules以独立于平台的方式(win7/winxp等,只有Windows)以给定名称查找进程的pid。除了使用系统命令外,我无法找到任何东西。 是的,我尝试了WM_QUIT,但问题在这里保持不变。我无法找到具有给定名称的进程的PID。 – Amar 2011-01-08 06:21:42