外部の実行可能ファイル(いわゆるEXE)を実行させるのに
shell関数を利用しています。

この関数は非同期に実行してしまうのですが、これを
同期させる方法をご存知の方はいらっしゃいませんでしょうか?

このQ&Aに関連する最新のQ&A

INFINITE」に関するQ&A: INFINITEの子供の時の写真

A 回答 (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
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

早速やってみます。

結果は後ほど・・・

お礼日時:2001/02/19 16:03

できません。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報