c# 允许多开_C#限制程序只能运行一個实例 (防多开)

//方法二:禁止多个进程运行,并当重复运行时激活以前的进程

usingSystem;usingSystem.Collections.Generic;usingSystem.Windows.Forms;usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;usingSystem.Reflection;namespaceDuoYeMianIE

{static classProgram

{///

///应用程序的主入口点。///

[STAThread]static voidMain()

{//Get the running instance.

Process instance =RunningInstance();if (instance == null)

{ System.Windows.Forms.Application.EnableVisualStyles();//这两行实现 XP 可视风格

System.Windows.Forms.Application.DoEvents();//There isn't another instance, show our form.

System.Windows.Forms.Application.Run(newLamBrowser());

}else{//There is another instance of this process.

HandleRunningInstance(instance);

}

}public staticProcess RunningInstance()

{

Process current=Process.GetCurrentProcess();

Process[] processes=Process.GetProcessesByName(current.ProcessName);//Loop through the running processes in with the same name

foreach (Process process inprocesses)

{//Ignore the current process

if (process.Id !=current.Id)

{//Make sure that the process is running from the exe file.

if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==current.MainModule.FileName)

{//Return the other process instance.

returnprocess;

}

}

}//No other instance was found, return null.

return null;

}public static voidHandleRunningInstance(Process instance)

{//Make sure the window is not minimized or maximized

ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);//Set the real intance to foreground window

SetForegroundWindow(instance.MainWindowHandle);

}

[DllImport("User32.dll")]private static extern bool ShowWindowAsync(IntPtr hWnd, intcmdShow);

[DllImport("User32.dll")]private static extern boolSetForegroundWindow(IntPtr hWnd);private const int WS_SHOWNORMAL = 1;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值