'判断运用程序是否已经启动。如果已经启动,则不必再启动同样的程序。 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
怎么用,加到FrmMain_Initialize还是FrmMain_Load中
qingming81(晴明) : 如果被激活的窗口是最小化的,如果使其正常化?
If App.PrevInstance = True Then MsgBox "程序以運行!", vbExclamation End If
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,可自定义
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
如果被激活的窗口是最小化的,如果使其正常化?
MsgBox "程序以運行!", vbExclamation
End If
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,可自定义