就是在登陆窗体后台代码(或者说是程序的第一运行窗体后台代码)
-----------------------------coding-----------------------------------------------
'For single instance
Public Function CheckNimsRunning() As Integer
Dim pTmp As Process() = Process.GetProcesses()
Dim pCurrent As Process = Process.GetCurrentProcess()
If (pTmp.Length > 0) Then
Dim i As Integer
While (i < pTmp.Length)
If (pTmp(i).Id > 4) Then
If (pTmp(i).Id <> pCurrent.Id) Then
'If (pTmp(i).MainModule.ModuleName = pCurrent.MainModule.ModuleName) Then
If (pTmp(i).ProcessName = pCurrent.ProcessName) Then
Return (pTmp(i).Id)
End If
End If
End If
i = i + 1
End While
End If
Return (0)
End Function
-----------------------------coding-----------------------------------------------
然后在入口的 Form_Load 中合适的位置写入下代码
-----------------------------coding-----------------------------------------------
'For single instance
Dim pNimsID As Integer = CheckNimsRunning()
If (pNimsID > 0) Then
AppActivate(pNimsID)
Me.Close()
Exit Sub
End If
-----------------------------coding-----------------------------------------------
关于单实例上面的代码有些小bug,就是在打开程序以后,继续狂点击程序开始的exe,会报错!
现把代码修改如下:
Dim myProcesses As Process()
Dim myfilename As String
myfilename = Application.ExecutablePath
myfilename = myfilename.Substring(myfilename.LastIndexOf("\") + 1)
myfilename = myfilename.Substring(0, myfilename.LastIndexOf("."))
myProcesses = Process.GetProcessesByName(myfilename)
If myProcesses.Length > 1 Then
MessageBox.Show("已经登陆", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Me.Close()
Application.Exit()
End If