WPF只运行一个实例

正文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[DllImportAttribute("User32.dll")]
private static extern int FindWindow(string ClassName, string WindowName);

[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(int hWnd);

private void checkProcess()
{
Console.WriteLine("程序启动");
Process current = Process.GetCurrentProcess();
//获取欲启动进程名
string strProcessName = Process.GetCurrentProcess().ProcessName;
var processList = Process.GetProcessesByName(strProcessName);
if (processList.Length > 1)
{
foreach (var process in processList)
{
if (process.Id == current.Id) continue;
int hWnd = FindWindow(null, process.MainWindowTitle.ToString());
SetForegroundWindow(hWnd);
}
Environment.Exit(1);//退出程序
return;
}
}

调用

1
2
3
4
protected override void OnStartup(StartupEventArgs e)
{
checkProcess();
}