我正在用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