VB.NET 多重启动的问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:25:15
防止exe程序多重启动的控件,要求如下:
1.如果程序已经运行,要将该程序激活。
2.不能从sub main()启动(也就是,工程的启动是windows form application)
我做了一个判断的函数如下:

Public Function ShowPrevProcess() As Boolean

Dim curProcess As Process = Process.GetCurrentProcess()
Dim allProcesses() As Process = Process.GetProcessesByName(curProcess.ProcessName)

For Each hProcess As Process In allProcesses
If hProcess.Id <> curProcess.Id Then
If String.Compare( _
hProcess.MainModule.FileName, _
curProcess.MainModule.FileName, True) = 0 Then

If IsIconic(hProcess.MainWindowHandle) Then
ShowWindowAsync(hProcess.MainWindowHandle, SW_RESTORE)
End If

SetForegroundWindow(hProcess.MainWindowHandle)

Return True

End If

VB2008里的设置:
项目属性->应用程序->生成单个实例应用程序

我建议你使用DDE来激活。简单方便

你试试在实例化后加入看行不行

这是我以前做过得仿多开代码 不知道能不能帮到你

Dim Bo As Boolean
Dim PName As String = "防止多开" '程序进程名字
Dim instance As New System.Threading.Mutex(True, PName, Bo)'判断是否多开
If Bo Then
MsgBox("正常启动")'没有则正常启动
Else
'如果已经启动一个,则循环找到其进程的ID
For Each P As Process In Process.GetProcesses
If P.ProcessName = PName Then
AppActivate(P.Id)'根据ID 用AppActivate激活它
Exit For'退出循环
End If
Next
Application.Exit()'并关闭自身
End If