private void Form1_Load(object sender, EventArgs e)
{
//Si entre los procesos que estan ejecutandose hay alguno que tenga mi mismo nombre entonces cierro esta instancia.
if (Process.GetProcessesByName("Autocierre").Length > 1)
Close();
}
//El ejemplo completo que prometí
public partial class Form1 : Form
{
//Función importada de la librería user32.dll para mostrar una ventana en diferentes estados
[DllImport("user32.dll")]
public static extern long ShowWindow(IntPtr hwnd, uint nCmdShow);
//Función para pasar a primer plano una ventana y activarla
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hwnd);
//Variable que indica que hay mas de una instancia de la app ejecutandoce
private bool prev_instances = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Si hay mas de una instancia de mi aplicación
if(Process.GetProcessesByName("WindowsFormsApplication2").Length > 1)
{
//Asigno verdadero a la variable
prev_instances = true;
//Cierro el formulario
Close();
}
}
//Cuando se esta cerrando el formulario...
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//Si habían mas de una instancia
if (prev_instances)
{
//Obtengo el proceso principal de la primera instancia de mi app
Process p = Process.GetProcessesByName("WindowsFormsApplication2").Where(it => it.Id != Process.GetCurrentProcess().Id).First();
//Muestro la ventana
ShowWindow(p.MainWindowHandle, 1);
//La activo y la paso a primer plano
SetForegroundWindow(p.MainWindowHandle);
}
}
}
使用 Mutex 是另一种选择
如果它已经在运行,您还可以通过
SetForegroundWindow
del显示当前实例的窗口user32.dll
另一个使用 GUID 的 Mutex 示例:
它会是这样的:
如果您找到可执行文件的名称,请关闭应用程序。
你可以这样做,我认为现在更短我很着急如果我没有给你一个更好的解决方案,明天阅读我的评论
希望这可以帮到你。