• ベストアンサー

別アプリを終了する方法

A.EXE と B.EXEがあったとします。 A.EXEからShellExecuteアプリケーションB.EXEを立ち上げたとします。 その時にA.EXEを終了せずにB.EXEの処理が終わり次第、B.EXEからA.EXEを、 終了させたいのですが、可能でしょうか? いろいろと調べてみたのですが、見当がつきません。 どなかたご教授願えませんでしょうか? ちなみにVC++6.0MFCです。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.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のウィンドウ名とは、タスクマネージャーに表示される名称です。

yomogikun
質問者

お礼

わかりやすい説明ありがとうございました。 参考にさせて頂きます。

その他の回答 (1)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.1

んーと、A.EXEから監視をしているのならば話しは簡単なのですが、B.EXEから指示したいのですよね? 経験は有りませんが... 1.API32のFindWindowでA.EXEを探し、見付けたインスタンスハンドル(HINST)からウィンドウハンドル(HWND)を更に探り、そのHWNDに破棄(WM_DESTROY)を投げる。 2.B.EXE起動時にA.EXEからウィンドウハンドルを引き渡す。そのHWNDに破棄(WM_DESTROY)を投げる。 3.DDE通信を行って相互通信する。 のいずれかで可能かな。ちょっと自信無しです。

yomogikun
質問者

お礼

早速ご教授していただいた内容を試してみたいと思います。 ありがとうございました。

関連するQ&A