- ベストアンサー
実行可能ファイルの同期?
外部の実行可能ファイル(いわゆるEXE)を実行させるのに shell関数を利用しています。 この関数は非同期に実行してしまうのですが、これを 同期させる方法をご存知の方はいらっしゃいませんでしょうか?
- みんなの回答 (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
その他の回答 (1)
- KojiS
- ベストアンサー率46% (145/312)
できません。 呼び出し元プログラムで終了まで待つしかありません。
お礼
ご回答、ありがとうございます。 早速やってみます。 結果は後ほど・・・