掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
二重起動したら既に起動しているアプリを終了する方法 (ID:103400)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
後から起動した方が有効として、先に起動していた方が終了とするのではなく、 既に起動されていたら、自分は何も実行せずに即時終了させる…という 逆パターンでは駄目なのでしょうか。それで良ければ、こんな感じにできます。 http://support.microsoft.com/kb/185730/ja もし、自分以外のアプリを終了させるとなると、たとえば (1) Project1.EXE を起動させる。これを「A」とする。 (2) 他に同アプリは起動していなかったので、A は特に何もしない。 (3) 後から、同EXE がほぼ同時に 2 つ起動された。これらは「B」「C」と呼ぶ。 (4) B は A と C に終了通知を投げ、C は A と B に終了通知を投げる。 (5) そして誰も居なくなった…。 という事態になってしまうことも考えられますので、 この部分の作りこみをどうするかは、事前に良く考えておいてください。 なお、プロジェクト間通信としては、以下のような案で如何でしょう。 ・DDE を用いる。(非表示の Label コントロール等を通信に利用) 相手側の Label に文字列を送り込み、受信側は Change イベントが 発生したタイミングで、自分自身を終了させるように実装する。 http://7ujm.net/VB/VB6DDE.html http://support.microsoft.com/kb/189498/ja 利点:VB の標準命令だけで実装できる。 欠点:複数アプリとの通信ができない。 ・ActiveX EXE によるオートメーション操作。 http://kozhouse.homeip.net/dcomchat/ VB6 付属 CD-ROM 内の Coffee クライアントサンプルなど http://msdn.microsoft.com/en-us/library/aa445814.aspx 利点:どのようなデータでも引き渡せるため、終了以外の目的にも応用可能。 欠点:ActiveX であるがため、事前にレジストリへの登録が必要となる。 また、同アプリにサーバー/クライアントの機能を同居させるため、 相手が終了した後は、自身がサーバーの責を引継ぐよう設計する必要がある。 ・ウィンドウメッセージを用いる。 SendMessage API で WM_CLOSE を送出して終了させる。 あるいは、WM_SETTEXT メッセージを TextBox で送出し、TextBox_Change で 受けたり、ユーザー定義メッセージをサブクラス化して受け取るなどして、 それを終了の合図とするように作りこむなど。 利点:レジストリ登録が不要となる。 欠点:通信相手のウィンドウハンドル(hWnd)を調べる必要がある。 ・Win32_Process クラスの Terminate メソッドを呼び出す。 WMI にてプロセスを列挙し、自分以外に対して終了命令を投げていく。 利点:API 宣言も ActiveX 宣言も不要となる。 欠点:外部からの強制終了となるため、Form の Unload イベント等は実行されない。 ・TASKKILL コマンドを用いる。 Shell 関数にて TaskKill.exe を呼び出して終了通知を発行する。 利点:終了時に QueryUnload も発生するため、比較的安全・簡単に終了させられる。 欠点:通信相手のプロセスIDが必要となる。 また、XP Home には TASKKILL が用意されていない(Pro なら OK)。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.