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

本文共 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

你可能感兴趣的文章
(算法)交错的字符串
查看>>
hdu 5471(状压DP or 容斥)
查看>>
oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动的区别
查看>>
NSQ部署
查看>>
git常用命令记录
查看>>
IBM发布新一代云计算工具包MobileFirst Foundation
查看>>
唯品会HDFS性能挑战和优化实践
查看>>
大规模学习该如何权衡得失?解读NeurIPS 2018时间检验奖获奖论文
查看>>
大厂前端高频面试问题与答案精选
查看>>
我们用5分钟写了一个跨多端项目
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>