ShellExecuteで起動したアプリケーションを終了するには


hige8989  2004-11-10 15:42:19  No: 86614  IP: [192.*.*.*]

[VB6.0]

こんにちは。
ShellExecuteで起動したアプリケーションを
終了させるにはどうすれば、よいでしょうか?

よろしくお願いいたします。

編集 削除
Say  2004-11-10 22:14:00  No: 86615  IP: [192.*.*.*]

Window Handle を持っているなら、
WM_CLOSEをSendMessageし、
持たないなら、Process Handleを取得して、
TerminateProcessするとか・・・。

起動アプリが自作なら、何らかの終了手段を
用意しておいてやるほうが好ましいですが。

編集 削除
たくみ  2004-11-15 03:26:41  No: 86616  IP: [192.*.*.*]

たぶん起動アプリが自作でないからお困りなのですよね?
私も以前はわからず行っちゃたきり状態で泣いてました。

で、その起動アプリってなんでしょうか?
ひょっとしてExcelとかWordとかOfficeの類ですか?
例えばExcelだったら(もちろん参照設定をした後)
Private WithEvents XlBook As Excel.Workbook
ってやって、メインのフォームの中に
Private Sub xlBook_BeforeClose(Cancel As Boolean)
とイベントを埋め込めば一発解決ですよね。

で、OfficeとかのActiveX対応してるものでないアプリ
だった場合どうするか?ですよね。
一番簡単で現実的なのがWin32APIでキャプション名調べて
あればそのハンドルを得て、すきに料理する、でしょうか。

でもキャプション名が動的にその都度変わる場合、泣きますよね。
そのときはとにかくクラス名を調べてそいつで料理する、
という具合です。

編集 削除
よし  2004-11-15 19:51:20  No: 86617  IP: [192.*.*.*]

これなんてどうでしょう?

例えばメモ帳の場合

アプリ起動時
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"のように
起動時にそのハンドルを取得すれば
いいのではないでしょうか

編集 削除