- ベストアンサー
別アプリを終了する方法
A.EXE と B.EXEがあったとします。 A.EXEからShellExecuteアプリケーションB.EXEを立ち上げたとします。 その時にA.EXEを終了せずにB.EXEの処理が終わり次第、B.EXEからA.EXEを、 終了させたいのですが、可能でしょうか? いろいろと調べてみたのですが、見当がつきません。 どなかたご教授願えませんでしょうか? ちなみにVC++6.0MFCです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。itohhといいます。 A.EXEがウィンドウを持っているものとして回答します。 NNJA104さんの回答でほぼ良いと思うのですが、送るメッセージは、WM_CLOSEのほうが良いと思います。 一般的にOnClose(WM_CLOSEが受信されたとき)イベントで終了処理を行うのがベストだと思うからです。 1についての例を記載すます。 (B.EXE内の作り) HWND hWnd; hWnd = ::FindWindow( NULL, "A.EXEのウィンドウ名"); ::PostMessage(hWnd, WM_COLSE, 0, 0); (A.EXE内の作り) CWnd::OnCloseに飛ぶのでメモリの解放などの終了処理を行う。 A.EXEのウィンドウ名とは、タスクマネージャーに表示される名称です。
その他の回答 (1)
- NINJA104
- ベストアンサー率43% (133/306)
んーと、A.EXEから監視をしているのならば話しは簡単なのですが、B.EXEから指示したいのですよね? 経験は有りませんが... 1.API32のFindWindowでA.EXEを探し、見付けたインスタンスハンドル(HINST)からウィンドウハンドル(HWND)を更に探り、そのHWNDに破棄(WM_DESTROY)を投げる。 2.B.EXE起動時にA.EXEからウィンドウハンドルを引き渡す。そのHWNDに破棄(WM_DESTROY)を投げる。 3.DDE通信を行って相互通信する。 のいずれかで可能かな。ちょっと自信無しです。
お礼
早速ご教授していただいた内容を試してみたいと思います。 ありがとうございました。
お礼
わかりやすい説明ありがとうございました。 参考にさせて頂きます。