C# 保持程序唯一性打开的一种方式
-
概述
之前在博客园找了好久,就这么一个小功能,卡了好几天没解决就只能暂时放弃,直到半年后才偶然看到同事写的,感觉挺好的,记录一下顺便分享。有用可以点个赞。转载请注明出处,谢谢。
-
代码:查看程序是否已经运行
/// <summary> /// 查看程序是否已经运行 /// </summary> /// <returns></returns> public static Process GetExistProcess() { Process currentProcess = Process.GetCurrentProcess();//当前程序 foreach (Process process1 in Process.GetProcessesByName(currentProcess.ProcessName)) { //同名程序有2个或者2个以上 if (process1.Id != currentProcess.Id) { return process1;//返回另外一个同名程序的进程 } } return null; }
-
代码:调用
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var runningProcess = GetExistProcess(); if (runningProcess != null) //同名程序已经在运行 { IntPtr mainWindowHandle1 = runningProcess.MainWindowHandle; if (mainWindowHandle1 == IntPtr.Zero)//窗口被隐藏了 { //目标窗体的 Text 属性中的字符串 mainWindowHandle1 = FindWindow(null, "唯一程序"); } ShowWindowAsync(mainWindowHandle1, 1); SetForegroundWindow(mainWindowHandle1); } else { Application.Run(new MainForm()); } } }
代码:Win32API
//根据任务栏应用程序显示的名称找窗口的名称 [DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /// <summary> /// 该函数设置由不同线程产生的窗口的显示状态 /// </summary> /// <param name="hWnd">窗口句柄</param> /// <param name="nCmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分</param> /// <returns></returns> [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); /// <summary> /// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。 /// </summary> /// <param name="hWnd"></param> /// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns> [DllImport("user32.dll ")] public static extern bool SetForegroundWindow(IntPtr hWnd);
分类:
C# / WinForm
标签:
C#
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章