• ベストアンサー

別アプリを終了する方法

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

  • 別アプリ終了させる

    いつもお世話になります。 再度質問ですが、 A.EXEとB.EXEがあり、B.EXEはA.EXEからShellExecuteで起動させています。 起動したB.EXEからA.EXEを終了させたいのですが、それにはA.EXEの ウィンドウハンドルが必要になると思います。 このときにA.EXEのタイトルは動的に変更されるので、FindWindowは使えません。 そこでA.EXEからB.EXEを起動した時にhWNDを送ってやれば、B.EXEからA.EXEを 操作できるとおもいます。 hWNDを対象アプリに送りたいのですが、ShellExecuteやCreateProcessのパラメータにhWndを持たすことはできるのでしょうか? もたせることができそうですが、具体的にどう記述すればいいのかが わからないので、サンプルソースをつけていただければありがたいです。 見当違いであれば、別の方法をご教授ください。 よろしくお願いします。

  • 別アプリの終了について

    いつもお世話になります。 開発環境はVC++6.0MFCです。 以前にも質問させていただいたのですが、 A.EXEとB.EXEがあったとします。 A.EXEをB.EXEから終了させたい。 しかし、A.EXEのタイトル(キャプション)は動的に 変更があり、タイトルNULLの時もある。 私はFindWindowでウィンドウハンドルを取得し、WM_CLOSE を投げているのですが、この方法だと上記理由により、 不正動作になります。 どなたかこういう場合の解決方法をご存知の方、 ご教授よろしくお願い致します。

  • 別アプリを終了させる

    以前にも同様の質問をさせていただいたのですが、 再度質問です。 A.EXEとB.EXEがあったとします。 B.EXEからA.EXEを終了させたい。 そこで、FindWindowでA.EXEのウィンドウハンドルを ゲット。 その後、WM_CLOSEメッセージを送るという流れなのですが、 どうも、終了する時と終了しない時があります。 1回目は必ず、終了させる事ができず、2回目以降は 終了します。 原因がわからず、困っております。 なにか良い解決策などがございましたら、ご教授ください。 よろしくお願い致します。

  • Shellで起動したGnuplotを終了させるには

    VC++6.0からShellExecuteを使ってwgnuplot.exeと言うフリーのグラフ作成 プログラムを起動させています。 使い終わったらVCから終了させいのですが方法が解りません。 パイプ機能を使うと出来そうなのですが他に簡単な方法はないでしょうか。

  • プログラム終了後に自動で別のプログラムを起動する方法

    お世話になります。 あるアプリケーションセットアッププログラム(A.exe)と、その修正パッチ(B.exe)を同じCD-Rに焼いて、発行したいと考えています。 そこで、autorun.infを使用して、CD-R挿入時に自動的にA.exeファイルを実行するようにしたのですが、A.exeの終了後、さらに自動でB.exeを実行するように出来ませんか? autorun.inf のように簡単に出来るコードがあれば、と考えているのですが。 どうぞよろしくお願い致します。

  • 別プロセスのコントロールにフォーカスをあてたい

    VC++5.0 または VC++6.0 の環境で、MFC を使ってダイアログベースの EXEを造っています。 (OS は NT4.0 または 2000 です) 以下のことをしたいと思っています。 ・プロセスA、Bがあります。 ・プロセスAがプロセスBをフォアグランドにします。 →SetForegroundWindow() します。 ・プロセスAがプロセスBのボタンやエディットボックスなどのコントロールに フォーカスをあてる。 で、この最後のフォーカスをあてる処理は実現可能でしょうか? 自分のプロセス内のコントロールに対しては、SetFocus() で フォーカスをあてられたのですが、別プロセスではフォーカスを あてることができませんでした。 識者の方、ご教授願います。

  • MFCでの終了処理

    MFCでファイルを読み込み、画面表示するプログラムを作成しています。 読込ファイルにいくつかのバージョンがあり、旧バージョンを読み込んだ場合は旧バージョンのexeをShellExecuteで呼び出しています。 旧バージョンのファイルを読み込んだ場合バージョンチェック後旧バージョンのexeを呼び出し、起動中のプログラム(現在のバージョン)を終了しようと思っています。(ダイアログ表示等される前です。) その場合現在動いているプログラムはどのように終了させるべきでしょうか? VC++ではexitを使用しないような事をいくつかのページでみましたが、 exitに代わる方法を教えてください。

  • 別マシンでEXEを処理する方法についてです。

     いつもお世話になっております。 【環境】Aマシン:Win2000 Server IE6.0      Bマシン:Win2000 Pro IE6.0 【開発言語】VC++ 上記の環境でAマシンからBマシンにあるbbb.exeを 起動(パラメータも渡す)して、Bマシンの中で処理を したいのです。  当初はAマシンにあるaaa.exeを起動して、その処理の 中でWinExec("\\\\B\\C\\bbb.exe" "パラメータ")を 使用していました。>bbb.exeはAマシンで処理が走って しまいました。  次にリソースキットにあるSOON.EXEを使用して、 Bマシンにあるbbb.exe起動を試みました。Bマシンの TaskSchedulerに登録されて、Bマシン内でbbb.exeが 起動され処理が走りました。しかしながら、パラメータが 渡ってくれないことがわかりました。>やり方を私が 知らないだけかもしれませんが・・・。  このような処理がどうしたらできるのかを教えて いただきたく投稿させてもらいました。 よろしくお願いいたします。

  • 指定したアプリケーションをモニターの画面の最前面に出したい。

    お世話になります。 C++6.0 MFCで開発しております。 今、 (1)A.exeのボタンを押すとB.exeを起動 (2)B.exeが終了するとA.exeに終了通知をして、A.exeに処理を戻す。 処理をしているのですが、 (2)のA.exeに処理を戻した後、A.exeが最前面に表示されないのです。 A.exe以外にも、Wordやその他のアプリケーションを開いていた場合、 (2)の時点で、モニター上には、A.exeが最前面に表示したいのですが、 Wordやその他のアプリケーションが最前面に表示されます。 お手数ですが、どのようにすれば、他のアプリと同時起動している際に、 A.exeをモニターの最前面に表示できるか教えていただきたく思います。 以上よろしくお願いします。

  • アプリを開いた状態にする方法

    いつもお世話になります。 VC++でプロジェクト、「MFCアプリケーション」で Windowダイアログで用いてプログラムを書きましたが、 実行ファイル(.exe)を起動すると ウィンドウが閉じた状態になります(ディスクトップ画面に表示されず閉じて状態ではあるが、起動している状態)。 実行ファイル(.exe)を起動し、ウィンドウを開いた状態にする設定などはあるのでしょうか? ちなみに、閉じた状態で選択するとアプリは開きますが、あくまで、起動して開いた状態にしたいです。 どうぞよろしくお願い致します。

専門家に質問してみよう