掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
厳密にアプリケーションの終了状況を把握するには? (ID:84743)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> 案1) Shell関数の代わりに、WShShell.Runメソッドによる同期起動を使う。 > この方法を単純に使うと、他のアプリケーションが終了するまで > 起動した側のアプリケーションが止まってしまうということに > なるんですよね。 そのプロシージャの続行は停止しますが、アプリケーション自体は 引き続き操作可能です。たとえば、 Private Sub Command1_Click() Dim L As Long Me.Command1.Enabled = False With CreateObject("WScript.Shell") List1.AddItem Format(Now(), "hh:nn:ss YYYY-MM-DD") _ & " : Start 'CALC.EXE'" L = .Run("CALC.EXE", vbNormalFocus, True) List1.AddItem Format(Now(), "hh:nn:ss YYYY-MM-DD") _ & " : End 'CALC.EXE' (0x" & Right("00000000" & Hex(L), 8) & ")" End With DoEvents Me.Command1.Enabled = True End Sub のようなコードがあった場合、CALC.EXE の起動中も、フォーム等を 操作する事は可能ですし、Timerイベント等も発生しますよ。 > INFINITEを指定すると、監視すべき他のアプリケーションが終了したら、 > 制御が返ってくるという動作をするAPIですよね。 INFINITEだと、相手が終了するまで、こっちは何もできなくなってしまうので、 短めのタイムアウト時間を設定しておき、タイムアウト時にはDoEventsを 呼び出すようにしてみてください。 あるいは、MsgWaitForMultipleObjectsを使う方法もあります。 >> 案3) WMIのWin32_Processクラスによる監視を行う。 > まったく未知のクラスで、ネットで検索して調べましたけど、 とりあえず、Win32_Processクラスの前に、WMIについて調べて見てください。 WMIはもともと、VBScriptやVBからの操作も考慮した設計になっていますので、 VB向けのサンプルも多数見つかるかと思いますよ。 特に、Microsoft の TechNet スクリプト センターは、WMIのサンプルの宝庫ですよ。 http://www.showg.jp/tamper/wmi/index.htm http://wmifun.atinfinity.net/
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.