[VB6.0]
こんにちは。
ShellExecuteで起動したアプリケーションを
終了させるにはどうすれば、よいでしょうか?
よろしくお願いいたします。
Window Handle を持っているなら、
WM_CLOSEをSendMessageし、
持たないなら、Process Handleを取得して、
TerminateProcessするとか・・・。
起動アプリが自作なら、何らかの終了手段を
用意しておいてやるほうが好ましいですが。
たぶん起動アプリが自作でないからお困りなのですよね?
私も以前はわからず行っちゃたきり状態で泣いてました。
で、その起動アプリってなんでしょうか?
ひょっとしてExcelとかWordとかOfficeの類ですか?
例えばExcelだったら(もちろん参照設定をした後)
Private WithEvents XlBook As Excel.Workbook
ってやって、メインのフォームの中に
Private Sub xlBook_BeforeClose(Cancel As Boolean)
とイベントを埋め込めば一発解決ですよね。
で、OfficeとかのActiveX対応してるものでないアプリ
だった場合どうするか?ですよね。
一番簡単で現実的なのがWin32APIでキャプション名調べて
あればそのハンドルを得て、すきに料理する、でしょうか。
でもキャプション名が動的にその都度変わる場合、泣きますよね。
そのときはとにかくクラス名を調べてそいつで料理する、
という具合です。
これなんてどうでしょう?
例えばメモ帳の場合
アプリ起動時
lngRtn = ShellExecute(Me.hWnd, "open", "C:\WINDOWS\notepad.exe", vbNullChar, vbNullChar, SW_SHOWNORMAL)
lngWindow = FindWindow(vbNullString, "無題 - メモ帳")
アプリ終了時
if lngWindow<>0 then
Call PostMessage(lngWindow , WM_QUIT, 0, 0)
end if
動的にキャプションが変わる場合は
エクセルの場合 "Microsoft Excel"のように
起動時にそのハンドルを取得すれば
いいのではないでしょうか