こんにちわ。
Shell関数で取得したTaskIDを使って起動したアプリケーションを終了したいのですが、TaskIDでWindowハンドルを取得してPostMessageで終了させるということは可能でしょうか?
どなたかご存知の方教えてください。
全てのタスクがWindowハンドル(hwnd)を持っているわけではありませんので、
普通はできません。
通常、TaskID( = Process ID)を利用して終了させたい場合、
TaskIDからProcess Handleを取得し、
TerminateProcessで強制終了します。
ただし、場合によっては残骸が残る可能性があります。
Shell関数で起動したアプリがWindow Handleを持つことが確実で、
どうしてもWM_CLOSEで終了させたいのなら、
TaskIDからProcess Handleを取得し、
Process HandleからThread IDを取得し、
Thread IDに関連付けられたWindow Handleを列挙し、
そのWindow HandleでWM_CLOSEできるかもしれません。
たぶんhwnd取得にAPIを3つとコールバック関数1つを使いますので
必要なら調べてみてください。
もう解決されているかも知れませんが?
下記のサンプルを見つけましたので、試して見てください。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips100.htm
お返事遅くなってしまい申し訳ありませんでした。
ハンドル名をタスクIDから取得したいと書いたのですが、
実は状況が変わり、終了させたいアプリケーションがGeoSwitcherなるものの起動により立ち上げなくてはならなくなりまして、よってShellで起動できません。
現在立ち上がっているアプリの名前からアプリのハンドルを取得して強制終了という形を取りました。アプリの名前は分かるので。
Sayさんの後半おっしゃっていることを参考にしました。
サンプルは次のものを使用しました。
http://madia.world.coocan.jp/vb/API/AppWinExit.htm
あと、以下のサイトに
http://cgi23.plala.or.jp/a-w-h/mfc/appclose.html
TerminateProcessはあまり使わないほうがいいと書いてありました。
Process関係の知識は役に立ちました。
お二方ありがとうございます!
ツイート | ![]() |