当我运行一个程序时,想先检查进程里是否已经存在这个程序,如果有了,就把焦点设置到该程序界面,否则运行这个程序。该如何实现

解决方案 »

  1.   

    用 FindWindow(vbNullString, "窗体标题")找此程序窗体,找到即说明程序已运行,
      

  2.   

    '判断运用程序是否已经启动。如果已经启动,则不必再启动同样的程序。
       If App.PrevInstance = True Then
          Dim metitle As String
          metitle = App.title
          App.title = ""    '如此才不会Avtivate(激活)到自己
          Me.Caption = ""
          AppActivate metitle 'Activate(激活)先前就已行的程序
          unload me
          exit sub
       End If
      

  3.   

    怎么用,加到FrmMain_Initialize还是FrmMain_Load中
      

  4.   

    qingming81(晴明) :
    如果被激活的窗口是最小化的,如果使其正常化?
      

  5.   

    If App.PrevInstance = True Then
            MsgBox "程序以運行!", vbExclamation
        End If
      

  6.   

    如果被激活的窗口是最小化的,如果使其正常化:这个要使用API
      

  7.   

    不行啊?App.PrevInstance总为False
      

  8.   

    App.PrevInstance 不能再调试时使用!另外,如果同一个EXE COPY 到2个地方,或文件名更改后照样能打开2次只有使用API最好!
      

  9.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetActiveWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
    Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const SW_RESTORE = 9
    Private Const GW_HWNDNEXT = 2
    Private Const GWL_USERDATA = (-21)Private Const LNG_APP_ID  As Long = 1234567Public Function CheckMySelf(ByVal hwnd As Long) As Boolean
        Dim lngHwnd As Long
        Dim lngData As Long    CheckMySelf= False    Call SetWindowLong(hwnd, GWL_USERDATA, LNG_APP_ID)
        
        lngHwnd = FindWindow(vbNullString, vbNullString)    Do Until lngHwnd = 0
            lngData = GetWindowLong(lngHwnd, GWL_USERDATA)        If (lngData = LNG_APP_ID) And (lngHwnd <> hwnd) Then
                
                If IsIconic(lngHwnd) Then
                    Call ShowWindow(lngHwnd, SW_RESTORE)
                End If
                    
                Call SetActiveWindow(lngHwnd)
                
                CheckMySelf= True            Exit Do
            End If
            
            lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)
        Loop
    End Function
    在主窗体Load时
    If CheckMySelf(Me.hwnd) Then
        End
    End IfLNG_APP_ID作为应用程序唯一标记ID,可自定义