いろいろやり方があると思いますが、とりあえず2パターン載せておきます。どちらも対象となるプログラムを起動して、WaitForSingleObjectで待機しています。違うのはプロセスハンドルの取得の部分だけです。
'ShellExecuteEX使用
DimsdtSEXIAsSHELLEXECUTEINFO
DimlretAs Long
With sdtSEXI
.cbSize = Len(sdtSEXI)
.fMask = SEE_MASK_NOCLOSEPROCESS
.hwnd = Me.hwnd
.lpVerb = "open"
.lpFile = "c:\windows\calc.exe"
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = SW_SHOWNORMAL
.hInstApp = 0
.lpIDList = 0
End With
lret = ShellExecuteEX(sdtSEXI)
lret = WaitForSingleObject(sdtSEXI.hProcess, INFINITE)
MsgBox "終了しました。"
'Shell使用
DimhProcessAs Long
lret = Shell("c:\windows\calc.exe", vbNormalFocus)
hProcess = OpenProcess(SYNCHRONIZE, 0, lret)
lret = WaitForSingleObject(hProcess, INFINITE)
lret = CloseHandle(hProcess)
MsgBox "終了しました。"
'---------------------------------------------------------------
'
'---------------------------------------------------------------
'WaitForSingleObject
Public Declare FunctionWaitForSingleObjectLib"kernel32" (ByValhHandleAs Long,ByValdwMillisecondsAs Long)As Long
'CloseHandle
Public Declare FunctionCloseHandleLib"kernel32" (ByValhObjectAs Long)As Long
'OpenProcess
Public Declare FunctionOpenProcessLib"kernel32" (ByValdwDesiredAccessAs Long,ByValbInheritHandleAs Long,ByValdwProcessIdAs Long)As Long
'OpenProcessで使用する定数
Public ConstSYNCHRONIZE = &H100000
'WaitForSingleObjectで使用する定数
Public ConstINFINITE = &HFFFF' Infinite timeout
'ShellExecuteEX
Public Declare FunctionShellExecuteEXLib"shell32.dll"Alias"ShellExecuteEx" (SEIAsSHELLEXECUTEINFO)As Long
'ShellExecuteEXで使用する構造体
Public TypeSHELLEXECUTEINFO
cbSizeAs Long
fMaskAs Long
hwndAs Long
lpVerbAs String
lpFileAs String
lpParametersAs String
lpDirectoryAs String
nShowAs Long
hInstAppAs Long
lpIDListAs Long
lpClassAs String
hkeyClassAs Long
dwHotKeyAs Long
hIconAs Long
hProcessAs Long
End Type
'ShellExecuteEXで使用する定数
Public ConstSEE_MASK_NOCLOSEPROCESS = &H40
Public Const SW_SHOWNORMAL = 1
DownLoad vbtips053.lzh 2KB (VB6.0)