没有人知道吗?msdn上说默认的情况下是异步调用,不知道同步方式该怎么调用?
解决方案 »
- 有关mdi窗体的两个问题有没有简单办法?
- 为什么put语句写文件的中文字符串不正常
- 急!帮我检查一下这段代码,谢谢。(在线等待)
- 急呀!请高手们指点一下!
- 預祝春節快樂,*****再再次散200分***** 放假前結贴
- 数据库备份问题
- 请问vb中的转义字符是什么?
- vb中做报表咋这么难??????????????????????????????????
- 请问vb中用的坐标单位是提吧?在picturebox中能否用像素点作为参数呢?还有,图片文件是以点为单位存的,点>提,他如何给提为坐标的图片付值?
- 我才学vb,想问一个问题?
- >>>>>怎样用代码弹出TOOLBAR中dropdown按钮的下拉菜单?
- 简单问题。help me~~~~~~
http://www.csdn.net/expert/TopicView.asp?id=149550Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1& Public Function ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO ' Initialize the STARTUPINFO structure:
start.cb = Len(start) ' Start the shelled application:
ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc) ' Wait for the shelled application to finish:
ret& = WaitForSingleObject(proc.hProcess, INFINITE)
Call GetExitCodeProcess(proc.hProcess, ret&)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
ExecCmd = ret&
End Function Sub Form_Click()
Dim retval As Long
retval = ExecCmd("notepad.exe")
MsgBox "notepad Process Finished, Exit Code " & retval
retval = ExecCmd("calc.exe")
MsgBox "calc Process Finished, Exit Code " & retval End Sub HOWTO: 32-Bit App Can Determine When a Shelled Process Ends
http://support.microsoft.com/support/kb/articles/Q129/7/96.asp?LN=EN-US&SD=gn&FR=0&qry=WaitForSingleObject&rnk=1&src=DHCS_MSPSS_gn_SRCH&SPR=VBB
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongPrivate Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFF ' Infinite timeout
Private Const WAIT_TIMEOUT = &H102&Public Function ShellForWait(sAppName As String, Optional ByVal lShowWindow As VbAppWinStyle = vbMinimizedFocus, Optional ByVal lWaitTime As Long = 0) As Boolean
Dim lID As Long, lHnd As Long, lRet As Long
On Error Resume Next
lID = Shell(sAppName, lShowWindow)
If lID > 0 Then
lHnd = OpenProcess(SYNCHRONIZE, 0, lID)
If lHnd <> 0 Then
Do
lRet = WaitForSingleObject(lHnd, lWaitTime)
DoEvents
Loop While lRet = WAIT_TIMEOUT
CloseHandle lHnd
ShellForWait = True
Else
ShellForWait = False
End If
Else
ShellForWait = False
End If
End FunctionShellForWait("notepad.exe",,&HFFFF)
Private Const SYNCHRONIZE = &H100000 '进程同步
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Const INFINITE = &HFFFFFFFFPrivate Sub cmdOpen_Click()
OpenFileWait "HH.exe ", "Help.chm"
End SubPrivate Sub OpenFileWait(tkShellFile As String, tkFileName As String)
wndID = Shell(tkShellFile & tkTempPath & tkFileName, vbNormalFocus)
wnd = OpenProcess(SYNCHRONIZE, 0, wndID)
WaitForSingleObject wnd, INFINITE
CloseHandle wnd
End Sub