ウィンドウ名があるEXEでは、
if (FirsthWnd = FindWindow(NULL, ウィンドウタイトル)) {
PostMessage(FirsthWnd, WM_CLOSE, 0, 0L);
}
で、外部アプリを終了可能ですが、
ウィンドウがない常駐アプリ(EXE名はA.EXE固定です)の終了を行いたいのですが
方法を思いつきません。
ご存知の方よろしくおねがいします。
http://support.microsoft.com/default.aspx?scid=kb;JA;175030
このへん参考に、目的のプロセスの ID 見つけ出して TerminateProcess かと。
停止される側のアプリ次第ではありますが、
WM_CLOSEをPostするにしても、TerminateProcessを使用するにしても
ユーザーが正常にオペレーションして終了させた場合と全く同じように
終了する保証は無いのでこの点は注意が必要だと思います。
終了させるアプリも自分が作成している、または仕様の変更が可能で
WM_CLOSEはポストされたら必ず必要な終了処理を行って終了するとか
必要なデータの保存はその都度行っていてTerminateProcessを使用しても
データ保存に影響が無い等の保証が無ければ、終了結果の保証は出来ません。
一般の全てアプリに対して通用する外部からの安全な終了方法と言うのは
ないと考えた方が良いと思います。
お力添えありがとうございます。
外部アプリは自分で作成したアプリなので終了自体には問題ないと思います。
EXE名がわかっていても”狙い撃ち”での処理って難しいのですか?
EXE名での”狙い撃ち”プロセスID取得の方法をご存知の方が折られましたら、
よろしくお願いします。
シャノンさんが教えてくださったURLの研究をしながら・・・
> 外部アプリは自分で作成したアプリなので終了自体には問題ないと思います。
だったらもっと安全に殺せるんちゃいますか?
適当なイベントに反応して自殺するように仕組んでおけば、
そのイベントをbroadcastするだけで死んでくれるでしょうし。
επιστημηさんが言われているように
終了させる側のソフトも自分で作成しているなら
外部から終了させるための仕組みをそのソフトに組み込んでしまった方が
安全確実です。
なぜなら、終了する側が自分の意思を持って終了するからです。
この動きならするべき終了処理まできちんとして終了できるので
実はこれが一番理想的だと思います。
外部からの終了も必要なソフトなら外部から終了するためのインター
フェイスまで設計して組み込んでおくのが本来の姿だと思います。
その仕組みは実装しだいなのでよもぎ丸さん次第だと思いますけれど。
> 外部アプリは自分で作成したアプリなので終了自体には問題ないと思います。
> だったらもっと安全に殺せるんちゃいますか?
> 適当なイベントに反応して自殺するように仕組んでおけば、
> そのイベントをbroadcastするだけで死んでくれるでしょうし。
ごめんなさい;;説明がたりなかったです。
既存・外部アプリ(常駐)を終了
↓
修正済・外部アプリ入れ替え(自作コピーPG)
↓
修正済・外部アプリ(常駐)を起動
という処理を行いたかったのです。
またまた、説明不足でした;;
上記の処理を1本の自作アプリで行いたかったのです。
シャノンさんが紹介されている記事でほぼ解決できそうですね。
ただ、入れ替える予定があるのでしたら外部アプリ自体に
外部から安全に終了するための仕掛けまで入れといた方が
いいと思いますよ。
言われているようなことを今後もしたいのであれば、
アプリの仕掛けとして用意しておくのが正解でしょう。
あの記事、あちこちの掲示板で何度となく紹介してるんですよね。
もうすっかり FAQ もの。
みなさん、いろいろご助力ありがとうございました。
がんばって見たいと思います。