こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WINのタスクマネージャの強制終了

Windowsのプロセス関連のAPIを勉強中です。

タスクマネージャでアプリケーションを強制終了させようとすると、正常終了できるときはしようとしますよねぇ。
これはAPIのTerminateProcessでは決してできなそうなのですが、アプリケーションに正常終了を促すのはどうやればよろしいんでしょうか。

自分であれこれ考えた結果、CreateRemoteProcessでExitProcessを実行するスレッドを、対象のプロセスに植え付けるぐらいしか思いつかなかったのですが、これは正しいんでしょうか(試してません)。

投稿日時 - 2002-02-09 20:35:53

QNo.214839

暇なときに回答ください

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

こんにちは。itohhといいます。

>プロセスIDからウィンドウのハンドルを得る方法がわからないのですが、
>どうしたらよいでしょう。
自分でCreateProcessしたときに取得したプロセスIDでしょうか?
それですと簡単です。

ちょっと時間がないので、参考になるサイトを載せておきますのでそちらをご覧になってください。

・Visual C TechTips
URL:http://techtips.belution.com/ja/vc/

・新しいプロセスを作成し、そのプロセスが作成したウィンドウハンドルを取得するには?
URL:http://techtips.belution.com/ja/vc/0024/

投稿日時 - 2002-02-12 17:37:23

お礼

EnumThreadWindowsですね。
Get~とかQuerry~とかばっか調べてて、Enumまでは気が付きませんでした。
プロセスが持ってるスレッドのIDはわかるので、これはかなり利用できそうです。
ありがとうございました。

投稿日時 - 2002-02-13 00:06:23

ANo.3

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

こんにちは。itohhといいます。

VBアプリケーションでもWM_CLOSEメッセージはOKだと思いますよ。
もしかしたら、WM_DESTROYメッセージかもしれませんが。

ウィンドウを持たないアプリケーションについては、難しいですね。
アプリケーションがどういった状態で待ちに入っているか判らないわけですよね?
(メッセージ待ちなのか、ロックオブジェクトで待っているのか、sleepで待っているのか...)
ご自身で作成するアプリケーションならば、
ロックオブジェクトで待っていてSetEventなどで終了を通知されるまで待つ
という方法もあるとは思います。

投稿日時 - 2002-02-12 14:27:42

お礼

そっか、VBがWM_CLOSEを受け取れなかったら、ログオフ時に正常終了できるはずがありませんよね。
そうすると、プロセスIDからウィンドウのハンドルを得る方法がわからないのですが、どうしたらよいでしょう。
VCのウィンドウプログラミングはしたことがないので。

投稿日時 - 2002-02-12 16:04:46

ANo.1

こんにちは。itohhといいます。

>タスクマネージャでアプリケーションを強制終了させようとすると、
>正常終了できるときはしようとしますよねぇ。
これは、メッセージを受け付けることが出来る状態だからですよね。

WM_CLOSEメッセージを投げるというのはどうでしょうか?

WindowsプログラムならWM_CLOSEメッセージを受け取る処理は組み込まれていて
当たり前と思うのですが。

投稿日時 - 2002-02-10 00:34:28

お礼

それだと、ウィンドウを持っていないアプリケーションやVBアプリケーションに対応できないと思ったので、甘いと思ったのです。
もちろんExitProcessはVBでは正常終了しませんが。

コンソールアプリケーションはやはり正常終了されるのはムリでしょうか?

投稿日時 - 2002-02-11 13:38:36

あなたにオススメの質問