如题,谢谢

解决方案 »

  1.   

    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Const SYNCHRONIZE = &H100000
    Private Const INFINITE = &HFFFFFFFFpublic function Callbexe(byval EXEName as string)
    Dim pId As Long, pHnd As Long
    pId = Shell(EXEName)
    pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
    If pHnd <> 0 Then
        Call WaitForSingleObject(pHnd, INFINITE)
        Call CloseHandle(pHnd)
    End If
    end function
      

  2.   

    运行其他程序,并等待执行完毕 
    在程序中,我们可能要打开一个程序,如:Notepad,并要求在该程序结束后,才继续其他的操作。以下的代码完成这样的要求。
    声明:Public Const SYNCHRONIZE = &H100000
    Public Const INFINITE = &HFFFFFFFF
    Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongPrivate Sub Command1_Click()
    ’例子:(以 Notepad 为例)
    Dim pId As Long, pHnd As Long
    pId = Shell("Notepad", vbNormalFocus)
    pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ' 取得 Process Handle
    If pHnd <> 0 Then
    Call WaitForSingleObject(pHnd, INFINITE) ' 等待程序结束
    Call CloseHandle(pHnd)
    End If 
    MsgBox "Over!", vbInformation, "Over"
    End Sub
      

  3.   

    是执行你那个b.exe死掉的吧?b.exe执行时间长不长?单独执行b.exe看看会不会有问题
    怀疑跟你人品有关啦
      

  4.   

    调用过程中不是死机。而是A.exe程序调用WaitForSingleObject后就暂停响应而已,你嫌它窗口不响应难看的话,就把它最小化或隐藏起来就可以了。至于 ks2000 说的“暴毙”,因我不理解“暴毙”的意思,所以测试了一下用进程杀除工具杀除调用出来的程序,上面的程序依然可以正确判断并继续运行。