该实例虽然是已经在运行但是找不到窗体,所以想杀掉这个已经在运行的实例.
不要告诉我用下面的代码:
If App.PrevInstance Then
        MsgBox ("程序已经运行,不能再次装载。"), vbExclamation
        End
End If    这些代码只是判断实例在运行后就不要运行新的实例,而我要的是判断实例在运行后就杀掉这个已经在运行的实例,然后重新运行新的应用程序.哪位高手能告诉我如何实现这个功能.谢谢!

解决方案 »

  1.   

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long
      

  2.   

    '运行新实例,关闭旧实例的一个例子,用sendmessage结合临时文件实现的,为了安全
    '起见,临时文件的文件名最好特殊一些,以免误删文件
    '如果追求更高的效率,可考虑使用文件映射'窗体上一个按钮,一个textbox,添加这2个控件的目的是和新实例进行区别
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WM_CLOSE = &H10
    Dim Filename As StringPrivate Sub Command1_Click()
        Text1.Text = "this is test"
    End SubPrivate Sub Form_Load()
        On Error Resume Next
        Dim i As Long, oldhwnd As Long
        Filename = "c:\mydata.dat"
        If App.PrevInstance = True Then
            Open Filename For Binary As #1
            Get #1, , oldhwnd
            Close #1
            SendMessage oldhwnd, WM_CLOSE, 0&, ByVal 0&
            Kill Filename
            i = Me.hwnd
            Open Filename For Binary As #1
            Put #1, , i
            Close #1
        Else
            Kill Filename
            i = Me.hwnd
            Open Filename For Binary As #1
            Put #1, , i
            Close #1
        End If
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Kill Filename
    End Sub
      

  3.   

    Filename = "c:\mydata.dat"是什么一个文件?