Skip to content

Instantly share code, notes, and snippets.

@rqx110
Created February 14, 2023 07:16
Show Gist options
  • Save rqx110/285aa839fff2ce644b3d5141946e599a to your computer and use it in GitHub Desktop.
Save rqx110/285aa839fff2ce644b3d5141946e599a to your computer and use it in GitHub Desktop.
限制一次只能打开一个程序
internal static class ProcessManager
{
public static void GetProcessLock()
{
ProcessManager.ProcessLock = new Mutex(false, "Global\\LuYao.Toolkit[" + ProcessManager.GetUid() + "]", ref ProcessManager.HasLock);
if (!ProcessManager.HasLock)
{
ProcessManager.ActiveWindow();
Environment.Exit(0);
}
}
private static string GetUid()
{
byte[] array = Encoding.UTF8.GetBytes(Assembly.GetExecutingAssembly().Location);
using (MD5 md = MD5.Create())
{
array = md.ComputeHash(array);
}
return BitConverter.ToString(array);
}
public static void ActiveWindow()
{
using (Process currentProcess = Process.GetCurrentProcess())
{
foreach (Process process in Process.GetProcessesByName(currentProcess.ProcessName))
{
if (process.MainModule.FileName == currentProcess.MainModule.FileName)
{
ProcessManager.SwitchToThisWindow(process.MainWindowHandle, true);
break;
}
}
}
}
public static void ReleaseLock()
{
if (ProcessManager.ProcessLock != null && ProcessManager.HasLock)
{
ProcessManager.ProcessLock.Dispose();
ProcessManager.HasLock = false;
}
}
[DllImport("user32.dll")]
public static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
private static Mutex ProcessLock;
private static bool HasLock;
}
@rqx110
Copy link
Author

rqx110 commented Feb 14, 2023

https://www.coderbusy.com/archives/2837.html

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    public App()
    {
        ProcessManager.GetProcessLock();
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment