做了两个独立的程序:1.exe 、2.exe
1.exe里面可以放置定时器。
2.exe里面没有定时器,只是在内部进行一些简单的数学运算,且运行并计算完毕后窗体上会给出计算结果显示的。如何让早已运行的1.exe知道当前的2.exe的计算是否运行结束。
有几种方法呢?

解决方案 »

  1.   

    你用"shell & wait vb"做关键词,在google上搜索
    另外你也可以用全局钩子实现,不过只用vb很难实现
      

  2.   

    '唉,那就给你个代码吧:
    '在1.exe中申明如下API
    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 Long
    Private Const SYNCHRONIZE = &H100000
    Private Const INFINITE = &HFFFFFFFF
    '调用如下
    Dim pId As Long, pHnd As Long
    pId = Shell(要执行的应用程序即2.exe)
    pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
    If pHnd <> 0 Then
       Call WaitForSingleObject(pHnd, INFINITE)
       Call CloseHandle(pHnd)
       '2.exe结束,执行你的操作
       ..................
    else
       msgbox "调用失败"
    End If
      

  3.   

    在 1.exe 中:Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Timer1_Timer()
        Dim TemphWnd As Long
        
        TemphWnd = FindWindow(vbNullString, "2.exe的窗口标题")
        If TemphWnd = 0 Then
            MsgBox "2.exe 当前没有运行"
        End If
    End If
      

  4.   

    可以改进一下:在 1.exe 中:Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongDim isRunning As BooleanPrivate Sub Timer1_Timer()
        Dim TemphWnd As Long
        
        TemphWnd = FindWindow(vbNullString, "2.exe的窗口标题")
        If TemphWnd Then
            isRunning = True
        Else
            If isRunning Then
                isRunning = False
                MsgBox "2.exe 运行结束"
            End If
        End If
    End If