[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是否已经在进程列表中,如果存在则标识已经运行了客户端,如果存在获取窗口的句柄,并进行展示。
资料来源
https://www.codeproject.com/Articles/2976/Detect-if-another-process-is-running-and-bring-it
http://blog.csdn.net/wesley219/article/details/11050607
转载于:https://www.cnblogs.com/wolf-sun/p/6945703.html
[Winform]检测exe是否已经运行,并将其置顶相关推荐
- 电脑中所有exe文件无法运行解决方案
电脑中所有exe文件无法运行.通过系统恢复无法解决毛病,后来才想起肯定是exe文件关联被改动,只有通过修改注册表才能改回来.要修改注册表就要运行regedit.exe文件,这也是一个exe文件,也无法 ...
- 如何把一个java程序打包成exe文件,运行在没有java虚
如何把一个java程序打包成exe文件,运行在没有java虚 核心提示:首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了:但是exe文件在没有安装jre的电脑上不能运行,如果要 ...
- C# WinForm中获取当前程序运行目录的方法
C# WinForm中获取当前程序运行目录的方法: "AppDomain.CurrentDomain.BaseDirectory":获取当前应用程序所在目录的路径,最后包含&quo ...
- 在命令提示符中运行c语言程序,【命令提示符运行exe】命令提示符运行文件_命令提示符运行程序-系统城...
2015-06-15 17:07:38 浏览量:673 win7系统无法运行CMD命令提示符解决方法介绍给大家,很多操作我们都是通过CMD命令窗口设置的,最近用户反馈win7系统无法运行CMD命令,为 ...
- 从入门到入土:恶意代码Lab03-03.exe|分析实验|运行截图|问题回答|
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 不小心误删注册表exe,所有exe程序无法运行
首先我陈述下误删的原因吧,与其说是误删不如说就是自己有 意删除的,电脑Windows7,我在安装CASS10.1的时候,由于一个补丁程序始终不能运行,弹框显示说CASS10.1.6补丁.exe不是有效 ...
- CLion编译的exe文件无法运行
在编写Socket网络通信程序时,在CLion中可以运行,但是生成的exe文件无法运行,运行报错提示:无法链接动态库. 先说,解决方法: 在CLion中,修改CMAKElist文件,添加让连接其静态链 ...
- Keil运行密钥(pojie)软件运行时,exe程序无法运行/被删除/防火墙警告的解决方法
Keil运行破//解软件运行时,exe程序无法运行/被删除/防火墙警告的解决方法 1.不要解压安装包,直接在压缩包里双击exe运行程序 这时解压软件报错弹出威胁防护警告(如果你解压后再运行exe,安全 ...
- VS2010 打包生成exe文件后 运行安装文件出现 TODO:文件说明已停止工作并已关闭
一.VS2010 打包生成exe文件后 运行安装文件出现 TODO:<文件说明>已停止工作并已关闭 TODO: <文件说明>已停止工作 原因: 打包的时候在文件系统中建立了 ...
最新文章
- C#线程、前后台线程
- 连接池技术 Connection Pooling
- 恩布900手机客服,安卓版本号Entboost Android 1.0 正式公布
- P4211 [LNOI2014]LCA(离线 + 在线 做法)
- redis简单队列java_使用Redis的简单消息队列
- 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析
- Pentium Pro架构/流水线及其优化 (2) - 指令流水线 存储子系统详解
- windows 2003 iis 360防黑加固后不能使用
- Android 反编译 -smali文件对比java文件
- [转]关于Win32 Console的计时器
- 摄影测量——单片空间后方交会
- MacBook M1 Windows for ARM虚拟机体验
- 百度网盘怎么取消自动续费
- iOS开发者程序许可协议
- 计算机c盘一直减小咋办,C盘空间越来越小怎么办有效解决方案
- Oracle - 锁
- 通过excel文件在arcgis中点转面
- 在LINUX中安装Berkeley DB
- 如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍
- 阿里女合伙人身价达40亿,曾经月薪500小小前台,如何成功逆袭?