- ベストアンサー
応答なしの外部アプリの強制終了
現在、応答なし状態の外部アプリを強制終了させたいのですが上手くいきません。 アプリが応答なしかどうかはSendMessageTimeoutを使用して判断できるます。 しかし、強制終了をPostMessage(hwnd, WM_CLOSE, 0, 0)でしても戻り値は正常なのですがアプリは終了してくれません。(応答なしだから?でも戻り値返してるって事は応答なしじゃないの?謎) 一応、外部アプリが実行中の状態でPostMessageをコールしたらちゃんと終了してくれました。 他にアプリを強制終了させるような関数をあるのでしょうか?あるのであれば教えてください。 よろしくお願い致します。 === 環境 === Windows2000 VC++ 6.0
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
TerminateProcess でいけると思います。 応答なしになったアプリは PostMessage で終了させることは出来ません。 (多分です、そう記憶しています)
その他の回答 (2)
- yosi_yosi
- ベストアンサー率35% (165/468)
PostMessageの戻り値は、メッセージキューへのポストに成功したかどうかだけであって、相手から戻された値ではありません。それはPostMessageがメッセージキューへメッセージをおいた時点で関数が終了するからです。(SendMessageの場合には、相手からの戻り値がSendMessage関数の戻り値となります。ここのところを混同しないように注意が必要です。) #2さんが言われるように、応答なしのアプリに対していくらPostMessageを行っても応答できない(メッセージキューのメッセージが処理できない)状態ですので無駄です。TerminateProcessを使用すれば無理やりにでも終了させることができます。
お礼
PostMessageを実行しても出来ない理由がよくわかりました。勉強になります。 ありがとうございました。
- otakun
- ベストアンサー率13% (16/122)
私は、あまり詳しくないのでうまくいくかはわかりませんが、 『Ctrl』キーと 『Alt』キーと 『Delete』キー を同時に押して『強制終了』を選択したら、『強制終了』できるかもしれません。 他の方法は、知りません。
お礼
今回、質問したのはプログラム上で強制終了する方法を聞きたかったのです。 しかし、お返事ありがとうございます。
お礼
TerminateProcessを使用して強制終了できました。 ありがとうございます。