掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プロセスを安全に終了させるには? (ID:56464)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> 4.終了させられる側のプログラムに、そのための受け入れ口を作っておく > というのは、WM_CLOSEでなく、WM_USER+???の受け口を作成して、そのメッセージをPostしてあげる、ってことですよね? はい。厳密に言えば WM_APP + ??? ですが。 全てのプロセスが、トップレベルウィンドウに WM_CLOSE を投げられたら終了するとは限りませんからね。 > ・対象ウィンドウのハンドルは、FindWindowで取得するのが好ましいですか? FindWindow で取得しようが EnumWindows で取得しようがその他の関数で取得しようが、そのウィンドウに WM_CLOSE を投げたらプロセスが終了するという保証が無い以上は同じことです。 逆に言えば、汎用的なものではなく、特定のアプリだけを終了させたい場合、かつ、ウィンドウクラス名がわかっていて、そのウィンドウに WM_CLOSE を投げればプロセスが終了するという検証ができている場合は、FindWindow がいいでしょう。 > ・ウィンドウを持たないプロセスを起動した場合(バックグランドアプリ etc.)、 > どのような手法でそのプロセスは終了できますか? そのプロセスが外部からのメッセージ受け入れ口を用意していないならば、何らかの方法でメインスレッドを特定して、PostThreadMessage で WM_QUIT を投げるとか。 強引なので、TerminateProcess と、危険度では大して変わらない気がしますね。 タスクトレイ常駐アプリだったら、タスクトレイからのメッセージを受けるためのウィンドウがどこかにあるはずなので、それを突き止めて消すとか。 > MSDNヘルプに、プロセスをシャットダウンするにはという、解説があるんですが ExitProcess は安全に終了できますが、外部から呼び出すことはできません。 自プロセスを終了させたいときに使うものです。 …DLL インジェクションして ExitProcess なんてしない限りは。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.