在vb6中Modally运行外部应用程序



我想知道如何使用Visual Basic 6.0运行外部应用程序。运行应用程序不是问题,我的问题是我想以模式方式运行外部应用程序,也就是说,当外部应用程序运行时,我的应用程序处于非活动状态。

Option Explicit
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
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFF
Private Const WAIT_OBJECT_0 = 0
Private Const WAIT_TIMEOUT = &H102
Private Sub Form_click()
Dim llngProcID As Long
Dim llngWinHwnd As Long
Dim llngRetVal As Long
llngProcID = Shell("c:windowssystem32notepad.exe", vbNormalFocus)
If llngProcID <> 0 Then
llngWinHwnd = OpenProcess(SYNCHRONIZE, 0, llngProcID)
DoEvents
If llngWinHwnd <> 0 Then
llngRetVal = WaitForSingleObject(llngWinHwnd, INFINITE)
CloseHandle (llngWinHwnd)
End If
End If
MsgBox "Finished"
End Sub

这段代码解决了我的问题,但它阻止vb6应用程序的方式将其留在";不响应";不是很愉快,如果有人有其他方法可以做到这一点,我将不胜感激。

我已经多年没有这样做了,但看看我的旧代码:

Option Explicit
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STATUS_PENDING = &H103&
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Public Sub RunShell(cmdline As String, windowstyle As Integer)
Dim lHprocess As Long
Dim lProcessId As Long
Dim lExitCode As Long

lProcessId = Shell(cmdline, windowstyle)
lHprocess = OpenProcess(PROCESS_QUERY_INFORMATION, False, lProcessId)
Do
Call GetExitCodeProcess(lHprocess, lExitCode)
DoEvents
Loop While lExitCode = STATUS_PENDING
Call CloseHandle(lHprocess)
End Sub

最新更新