VB中怎么实现“我的程序.exe”如果已经在运行就恢复之前已经打开的程序界面,新启动的程序自动退出,如果之前打开的程序窗体最小化了或隐藏的也从任务栏里面恢复到默认窗口,就相当于聚焦已经打开的程序窗口,不让用户重复启动这个软件。我的这个小软件程序有登录过程窗体的,已经登录的界面是unload了登录窗体,打开主窗体的。程序自己加载的是登录窗体,所以这个判断要做在登录的form当中。现在的代码:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'主窗体加载
Private Sub Form_Load()
    If App.PrevInstance = True Then '如果已经登录
        ShowWindow FindWindow(vbNullString, App.Title), vbNormal
        End
    End If
End Sub偶是小虾新手,请VB高手或熟手指教,最好给出具体示例代码(包括API),谢谢! 有好的答案加分

解决方案 »

  1.   

    没完全理解,为啥不在if块里直接    Unload Me 退出呢
      

  2.   

    就是在你的“ShowWindow FindWindow(vbNullString, App.Title), vbNormal”后面增加一句:
    End 
    就行了嘛。
      

  3.   


    以下程序我已经测试成功,楼主请编译后,测试。(不知道我这算不算好答案?)Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
       (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
            ByVal nCmdShow As Long) As Long
    Private Const SW_SHOWNORMAL = 1Private Sub Form_Load()
        If App.PrevInstance = True Then
           Dim title As String: title = Me.Caption
           Me.Caption = ""
           ShowWindow FindWindow(vbNullString, title), SW_SHOWNORMAL
           AppActivate title
           End
        End If
    End Sub
      

  4.   

    建议把这个代码放到Main中,再把工程改为Main启动,这样可以绕过Load事件。