喃疯
易定者无感,易感者无定
最近在单独开发一个应用,从来也没有自己操心过这个事情,好在博客上面这方面的代码不少,就随便巴勒点,先完成需求再说,在此记录一下,以便日后查阅。
///
<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

代码已经记不清是转载何处了,如有追责请谅解!

 

posted on 2021-01-05 13:54  周子安  阅读(166)  评论(0)    收藏  举报