2009-02-03 74 views
1

我正在尋找一種方法來關閉另一個Windows應用程序。有沒有辦法做到這一點?Win32 API用於優雅地關閉另一個進程?

理想情況下,我想要一些基本上模仿ALT-F4的東西,或者按右上角的「X」或某些類似按鈕。

或者,有沒有這樣做的應用程序已經這樣做?對於我所想的,tskill有點過於苛刻。

回答

5

根據您的描述,這聽起來像一個窗口的應用程序。在這種情況下,您可以發送一條WM_CLOSE消息來模仿按下「X」按鈕時的行爲。

另一種選擇是使用TerminateProcess,但這可能是tskill所做的。

+0

好了,基本上我希望它關閉任何* *應用程序,優雅如果可能的話。這可以是窗口應用程序,控制檯應用程序,不管。是否有與控制檯應用程序相同的內容? – 2009-02-03 07:07:33

+0

窗口應用程序有一個消息循環,你可以使用你的優勢。使用控制檯應用程序,除了強力TerminateProcess之外,沒有通用的解決方案。 – 2009-02-03 07:21:50

1

我會先引用my answer to another question;雖然它是關於Delphi和服務的,但答案既不是Delphi-也不是服務特定的。總之,沒有一種通用的方式來優雅地停止一個程序。該問題的接受答案表明發佈wm_Close消息到程序的窗口。

5

編輯:我做了一些挖掘和發現與微軟MSDN Article推薦的方法。

由於這是一個Windows應用程序,您可以將WM_CLOSE消息發送到主窗口,但請記住,如果應用程序覆蓋處理WM_CLOSE消息,您可能會收到意外的結果。另外請記住,使用win32函數(如TerminateProcessExitProcess)也會產生不愉快的副作用(請參閱msdn上的註釋部分),其中包括dll中的全局數據以及死鎖。

如果您負責編碼目標應用程序,我建議添加某種形式的內置終止機制,可以在外部觸發(例如,環回地址或管道上的魔術數據包),這樣可以確保您的應用程序具有適當地自行清理。

1

更強大的命令來關閉程序是:

PostMessage (myhnd,WM_ENDSESSION,TRUE,ENDSESSION_LOGOFF);