gpt4 book ai didi

vb6 - VB 6 : How can I execute a . bat 文件但要等到其运行完成后再继续?

转载 作者:行者123 更新时间:2023-12-02 06:16:45 25 4
gpt4 key购买 nike

VB 6:如何执行 .bat 文件,但要等到其运行完成后再继续?

最佳答案

您将需要使用 Win32 API 调用 ShellExecuteEx和从SHELLEXECUTEINFO 结构中的ShellExecuteEx 返回的进程句柄上的WaitForSingleObject。这是我从项目中提取的旧代码。它 100% 工作,但我可能没有包含所有依赖项。您应该能够根据您的要求进行编辑:

      Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
' Optional fields'
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

Public Declare Function ShellExecuteEx Lib "shell32.dll"
(lpExecInfo As SHELLEXECUTEINFO) As Long

Public Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long

Declare Function WaitForSingleObject Lib "kernel32"
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long


Public Const SEE_MASK_NOCLOSEPROCESS As Long = &H40
Public Const SEE_MASK_FLAG_DDEWAIT As Long = &H100

'***App Window Constants***'
Public Const WIN_NORMAL = 1 'Open Normal'
Public Const WIN_MAX = 2 'Open Maximized'
Public Const WIN_MIN = 3 'Open Minimized'

'***Error Codes***'
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

' Returns 'True' if file was opened ...'
Public Function fHandleFile(ByVal stFile As String, _
ByVal lShowHow As Long, _
ByRef stRet As String, _
Optional ByVal bWaitForClose As Boolean = False) As Boolean
On Error GoTo err_Handler
Dim lRet As Long
Dim ret As Long
Dim lngProcessHandle As Long
Dim varTaskID As Variant
Dim shInfo As SHELLEXECUTEINFO
Dim retval As Long

'First try ShellExecute'
With shInfo
.cbSize = LenB(shInfo)
.lpFile = stFile
.nShow = lShowHow
If bWaitForClose Then
.fMask = SEE_MASK_FLAG_DDEWAIT + SEE_MASK_NOCLOSEPROCESS
End If
.lpVerb = "open"
End With

Call ShellExecuteEx(shInfo)
lRet = shInfo.hInstApp

If lRet > ERROR_SUCCESS And bWaitForClose = True Then
lngProcessHandle = shInfo.hProcess

Do
retval = WaitForSingleObject(lngProcessHandle, 0)
DoEvents
Loop Until retval <> 258
ret = CloseHandle(lngProcessHandle)
End If

fHandleFile = (lRet > 0)

exit_handler:
Exit Function

err_Handler:
RaiseError Err.Number, Err.Source, Err.Description
End Function

关于vb6 - VB 6 : How can I execute a . bat 文件但要等到其运行完成后再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/292098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com