最近在单独开发一个应用,从来也没有自己操心过这个事情,好在博客上面这方面的代码不少,就随便巴勒点,先完成需求再说,在此记录一下,以便日后查阅。
/// <summary>
/// 进程
/// </summary>
private Mutex mutex;
/// <summary>
/// 检查应用程序是否在进程中已经存在了
/// </summary>
private void CheckApplicationMutex()
{
bool mutexResult;
// 第二个参数为 你的工程命名空间名。
// out 给 ret 为 false 时,表示已有相同实例运行。
mutex = new Mutex(true, "MISTSTouchScreenPartner", out mutexResult);
if (!mutexResult)
{
// 找到已经在运行的实例句柄(给出你的窗体标题名 “Deamon Club”)
IntPtr hWndPtr = FindWindow(null, "MainWindow");
// 还原窗口
ShowWindow(hWndPtr, SW_RESTORE);
// 激活窗口
SetForegroundWindow(hWndPtr);
// 退出当前实例程序
Environment.Exit(0);
}
}
#region Windows API
// ShowWindow 参数
public const int SW_RESTORE = 9;
/// <summary>
/// 在桌面窗口列表中寻找与指定条件相符的第一个窗口。
/// </summary>
/// <param name="lpClassName">指向指定窗口的类名。如果 lpClassName 是 NULL,所有类名匹配。</param>
/// <param name="lpWindowName">指向指定窗口名称(窗口的标题)。如果 lpWindowName 是 NULL,所有windows命名匹配。</param>
/// <returns>返回指定窗口句柄</returns>
[DllImport("USER32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// 将窗口还原,可从最小化还原
/// </summary>
/// <param name="hWnd"></param>
/// <param name="nCmdShow"></param>
/// <returns></returns>
[DllImport("USER32.DLL")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
/// <summary>
/// 激活指定窗口
/// </summary>
/// <param name="hWnd">指定窗口句柄</param>
/// <returns></returns>
[DllImport("USER32.DLL")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
#endregion
代码已经记不清是转载何处了,如有追责请谅解!