博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Winform]检测exe是否已经运行,并将其置顶
阅读量:5921 次
发布时间:2019-06-19

本文共 2086 字,大约阅读时间需要 6 分钟。

摘要

在很多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);            ///           /// 应用程序的主入口点。          ///           [STAThread]          static void Main()          {              Process instance = GetRunningInstance();              if (instance == null)              {                  Application.EnableVisualStyles();                  Application.SetCompatibleTextRenderingDefault(false);                  Application.Run(new frm_Main());//在这启动主窗体。              }              else              {                  HandleRunningInstance(instance);              }          }          ///           /// 获取当前是否具有相同进程。          ///           /// 
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; } /// /// 激活原有的进程。 /// /// public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); SetForegroundWindow(instance.MainWindowHandle); } } }

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

资料来源

转载于:https://www.cnblogs.com/wolf-sun/p/6945703.html

你可能感兴趣的文章