連携 Shell関数で実行したアプリ(タスク)の終了を認識する関数

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][連携 Shell関数で実行したアプリ(タスク)の終了を認識する関数]
ここでは2つの方法を紹介しています。
Option Explicit

'@Win32 API関数を使い終了を認識する
Public Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As LongAs Long
Public Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As LongByVal bInheritHandle As Long, _
    ByVal dwProcessID As LongAs Long
Public Const PROCESS_QUERY_INFORMATION = &H400


Function TaskQuitForAPI(strTaskPath As StringAs Boolean
'******************************************************
'Shell関数で実行したアプリ(タスク)の終了を認識する関数
'******************************************************
'上記Win32 API 関数を使用
'本関数内でShellを実行している為、返値は何でも良いがBooleanを使用

Dim dwProcessID As Long
Dim hProcess As Long
Dim lpdwExitCode As Long
Dim ret As Long

'実行及びタスクIDを取得
dwProcessID = Shell(strTaskPath, 1)
'ハンドル取得
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, dwProcessID)

Do
  'プロセスの終了ステータスを取得
  ret = GetExitCodeProcess(hProcess, lpdwExitCode)
  '終了するまで待機
  DoEvents
Loop While lpdwExitCode
'++++++++++++++++++++++++++++++
'ここまで来るとLoopを抜けたので
'++++++++++++++++++++++++++++++
    TaskQuitForAPI = True '返値を返す
End Function


Private Sub test()
Dim strPath As String
'メモ帳のパス
strPath = """C:\WINDOWS\NOTEPAD.EXE"""

If TaskQuitForAPI(strPath) = True Then
    MsgBox "タスク" & vbCr & strPath & vbCr & "終了しました。"
End If

End Sub


Option Explicit


'AWScript.Shell(Windows Scripting Host)Runメソッドを使い終了を認識する

Function TaskQuitForWSH(strTaskPath As StringAs Boolean
'******************************************************
'Shell関数で実行したアプリ(タスク)の終了を認識する関数
'******************************************************
'WScript.Shell(Windows Scripting Host)Runメソッドを使用
'本関数内でShellを実行している為、返値は何でも良いがBooleanを使用

'Runメソッドの引数
'WaitOnReturn=True-プロセス完了まで待機
CreateObject("WScript.Shell").Run strTaskPath, , True

TaskQuitForWSH = True

End Function


Private Sub test2()
Dim strPath As String
'メモ帳のパス
strPath = """C:\WINDOWS\NOTEPAD.EXE"""

If TaskQuitForWSH(strPath) = True Then
    MsgBox "タスク" & vbCr & strPath & vbCr & "終了しました。"
End If

End Sub
<関連>





Production Japan Import Application. Since 1998