• ベストアンサー

実行可能ファイルの同期?

外部の実行可能ファイル(いわゆるEXE)を実行させるのに shell関数を利用しています。 この関数は非同期に実行してしまうのですが、これを 同期させる方法をご存知の方はいらっしゃいませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

以下、それを実現するプロシージャの例です(インデントが崩れて読みづらいかもしれません)。 ご参考ください Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Public Function pfncWaitApp(strExeName As String, Optional vntOpt As Variant) As Boolean Dim lngResultCode As Long Dim lngIdProcess As Long Dim lngHdlProcess As Long Dim intOpt As Integer Const SYNCHRONIZE = &H100000 Const INFINITE = &HFFFF 'フルパス指定の場合無視 'If InStr(strExeName, "\") = 0 Then 'カレントディレクトリの指定ファイル名を取得 ' strExeName = App.Path & "\" & strExeName 'End If If IsMissing(vntOpt) Then intOpt = vbNormalFocus Else intOpt = vntOpt End If 'EXE起動 On Error Resume Next lngIdProcess = Shell(strExeName, intOpt) DoEvents Select Case Err Case 53 'Not Found MsgBox "指定されたプログラムが存在しません" & _ vbCr & "プログラム名 = " & strExeName, vbCritical pfncWaitApp = False Case 0 '正常 '同期をとる lngHdlProcess = OpenProcess(SYNCHRONIZE, 0&, lngIdProcess) lngResultCode = WaitForSingleObject(lngHdlProcess, INFINITE) lngResultCode = CloseHandle(lngHdlProcess) pfncWaitApp = True Case Else 'エラー MsgBox Error, vbCritical pfncWaitApp = False End Select End Function

s13
質問者

お礼

ご回答、ありがとうございます。 早速やってみます。 結果は後ほど・・・

その他の回答 (1)

  • KojiS
  • ベストアンサー率46% (145/312)
回答No.1

できません。 呼び出し元プログラムで終了まで待つしかありません。

関連するQ&A

専門家に質問してみよう