失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [Winform]检测exe是否已经运行 并将其置顶

[Winform]检测exe是否已经运行 并将其置顶

时间:2021-08-22 08:16:04

相关推荐

[Winform]检测exe是否已经运行 并将其置顶

摘要

在很多pc应用中,基本上都需要有这样的判断,保证在一个终端只运行一个winform的client。并且如果最小化了,用户再次双击桌面图标的时候,将client置顶显示。

解决方案

需要使用windows的API,可以很方便的实现这个目的。

代码如下:

static class Program { private const int WS_SHOWNORMAL = 1; [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// 应用程序的主入口点。 /// </summary>[STAThread] static void Main() { Process instance = GetRunningInstance(); if (instance == null) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frm_Main());//在这启动主窗体。 } else { HandleRunningInstance(instance); } } /// <summary> /// 获取当前是否具有相同进程。 /// </summary> /// <returns></returns> public static Process GetRunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); //遍历正在有相同名字运行的例程foreach (Process process in processes) { //忽略现有的例程if (process.Id != current.Id) //确保例程从EXE文件运行 if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/" , "\\") == current.MainModule.FileName ) return process; } return null; } /// <summary> /// 激活原有的进程。 /// </summary> /// <param name="instance"></param> public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); SetForegroundWindow(instance.MainWindowHandle); } } }

上面代码的意思是判断exe是否已经在进程列表中,如果存在则标识已经运行了客户端,如果存在获取窗口的句柄,并进行展示。

资料来源

/Articles/2976/Detect-if-another-process-is-running-and-bring-it

/wesley219/article/details/11050607

如果觉得《[Winform]检测exe是否已经运行 并将其置顶》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。