• ベストアンサー

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

Windowsのプロセス関連のAPIを勉強中です。 タスクマネージャでアプリケーションを強制終了させようとすると、正常終了できるときはしようとしますよねぇ。 これはAPIのTerminateProcessでは決してできなそうなのですが、アプリケーションに正常終了を促すのはどうやればよろしいんでしょうか。 自分であれこれ考えた結果、CreateRemoteProcessでExitProcessを実行するスレッドを、対象のプロセスに植え付けるぐらいしか思いつかなかったのですが、これは正しいんでしょうか(試してません)。

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

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 >プロセスIDからウィンドウのハンドルを得る方法がわからないのですが、 >どうしたらよいでしょう。 自分でCreateProcessしたときに取得したプロセスIDでしょうか? それですと簡単です。 ちょっと時間がないので、参考になるサイトを載せておきますのでそちらをご覧になってください。 ・Visual C TechTips URL:http://techtips.belution.com/ja/vc/ ・新しいプロセスを作成し、そのプロセスが作成したウィンドウハンドルを取得するには? URL:http://techtips.belution.com/ja/vc/0024/

haporun
質問者

お礼

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

その他の回答 (2)

  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

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

haporun
質問者

お礼

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

  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 >タスクマネージャでアプリケーションを強制終了させようとすると、 >正常終了できるときはしようとしますよねぇ。 これは、メッセージを受け付けることが出来る状態だからですよね。 WM_CLOSEメッセージを投げるというのはどうでしょうか? WindowsプログラムならWM_CLOSEメッセージを受け取る処理は組み込まれていて 当たり前と思うのですが。

haporun
質問者

お礼

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

関連するQ&A

  • ウィルスバスター2009をタスクマネージャのプロセスから強制終了したい

    ウィルスバスター2009をタスクマネージャのプロセスから強制終了したい 再起動の繰り返しされるため、 プロセスの強制終了した後に、 システム復元を 実行したい。 どのプロセスを 強制終了したら、 再起動がとまりますか。

  • タスクマネージャでの終了について

    アプリケーションソフトを、タスクマネージャで終了させると何か問題はありますでしょうか? というのは、先日こちらで質問させていただいたことの経過なんですが、常駐ソフトをショートカットキーで終了させたいというものです。 http://oshiete1.goo.ne.jp/qa4530593.html この質問時点では思いつかなかったのですが、タスクマネージャを使えば可能かと思い試してみました。 キー操作記憶型マクロ作成ソフトで、タスクマネージャを起動し目的のプロセスを選び終了、という流れのマクロのファイルにして、それをショートカットキーとして登録したところ、うまく目的のソフトを終了させることが出来ました。 ただ、正常に起動しているアプリケーションソフトをタスクマネージャで終了させると何か問題は無いかと心配です。 タスクマネージャで終了させるのは、アプリケーションが応答無しになったときやむを得ず、というイメージがあるので・・・ コマンド文?とかが書ければもっと真っ当な方法があるんでしょうけど、そういうのは全く分かりません。 こういうことをすると良くないものでしょうか。やめておいたほうがいいですか? どうぞアドバイスをお願いいたします。

  • 強制終了できないプロセスの強制終了

    異常終了するアプリケーションのプロセスが残ってしまい、 タスクマネージャでの強制終了も受け付けません。 これを強制終了させるにはどうすればよいでしょうか。

  • タスクマネージャー  「タスクの終了」 「プロセスの終了」

    vistaを使用しています。 タスクマネージャーの アプリケーションタブでの「タスクの終了」と プロセスタブでの「プロセスの終了」では違うのですか? どちらもアプリケーションを終了させる作業だと思っているのでうすが 「プロセスの終了」するときは警告画面がでます。 アドバイスよろしくお願いします。

  • タスクマネージャからの強制終了ができなくなった

    自分はWinXPユーザーです。 普段タスクマネージャから、いらないアプリケーションを強制終了しています。しかし今日になって、そのいらないアプリケーションを強制終了することができなくなってしまいました。 そして、普通のIEとは別に起動しているiexplore.exeというアプリケーションが自分のユーザー名で起動されています。ウイルスを疑ってウイルススキャンを行いましたが引っかかりません。 どのようにすればよいでしょうか。お知恵を拝借させてください。よろしくお願いします。

  • タスクマネージャー

    タスクマネージャーを開くと、プロセスとかいうのしか見れなくなりました 今までは、もうちょっと違うものが表示され、強制終了のときなどに楽にできたのですが、これでは、ブラウザが固まったときに強制終了ができません どうしたらいいでしょうか

  • タスクマネージャで終了できないプロセス

    Windows2000/XPや2000/2003serverで アプリケーションが応答無しで以上終了した後などに ウィンドウは消えてもプロセスがタスクマネージャに残ることがあり、 タスクマネージャから「プロセスの終了」と選択しても 「アクセスが拒否されました」と止められないことがあります。 OSを再起動する以外でこれを止める方法ってありませんか? CUIでできればうれしいのですが、なければGUIでも。 よろしくお願いします。

  • タスクマネージャーで終了しても…

    いつもお世話になっております。ノート型VAIOでWINDOWS XP を使用しています。あるアプリケーションが何度終了させても復活します。どうしたらよろしいのでしょうか?ヘルプなどを使って色々な事を試みましたが、どーーーーしても治りません。 ●原因と思われる事項と減少● DVDを見ている最中に画像が止まった(海外DVDのための不具合か??)  ↓ 強制終了(再起動)  ↓ 再度DVDを見ると画像と音声が遅れ、非常に見づらい状態になってしまった。  ↓ ヘルプで原因を調査し、他のアプリケーションが立ちあがっている可能性を確認。  ↓ タスクマネージャでアプリケーションを終了させる(三つほど立ちあがっていたので全て終了)  ↓ 再起動  ↓ 再度DVDを見ると、同じように音声と画像が遅れる。  ↓ タスクマネージャでアプリケーションを終了させる。 を繰り返ししていますが、何度タスクマネージャーでアプリケーションを終了させても、再起動すると復活してしまいます。どうしたらよろしいのでしょうか????? ヘルプを見て色々手を尽くして見ましたが、まったく分かりません(T_T)

  • タスクマネージャー

    タスクマネージャーと普通の強制終了は何が違うのでしょうか? あるアプリケーションソフトがフリーズしてしまったのですが、セーブしていなかったため、強制終了したくありません。 タスクマネージャーで終わらせるとデータが残ってる可能性がある、とかありますか? あるいは、1%でも、データを残したまま、フリーズを治せる方法があったら教えてください

  • タスクマネージャからプロセスを終了させたい

    MediaServerというソフトを使っていますが、タスクマネージャから終了させることができません。 プロセスの終了、プロセスツリーの終了を選んでも変化ありません。 再起動させると終了させられる時もありますが、時間がかかるので他のソフトを使って強制終了させられたり、他の手順で終了させられないかと思い質問させていただきました。 よろしくお願いします。