摘要

在很多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是否已经运行,并将其置顶相关推荐

  1. 电脑中所有exe文件无法运行解决方案

    电脑中所有exe文件无法运行.通过系统恢复无法解决毛病,后来才想起肯定是exe文件关联被改动,只有通过修改注册表才能改回来.要修改注册表就要运行regedit.exe文件,这也是一个exe文件,也无法 ...

  2. 如何把一个java程序打包成exe文件,运行在没有java虚

    如何把一个java程序打包成exe文件,运行在没有java虚 核心提示:首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了:但是exe文件在没有安装jre的电脑上不能运行,如果要 ...

  3. C# WinForm中获取当前程序运行目录的方法

    C# WinForm中获取当前程序运行目录的方法: "AppDomain.CurrentDomain.BaseDirectory":获取当前应用程序所在目录的路径,最后包含&quo ...

  4. 在命令提示符中运行c语言程序,【命令提示符运行exe】命令提示符运行文件_命令提示符运行程序-系统城...

    2015-06-15 17:07:38 浏览量:673 win7系统无法运行CMD命令提示符解决方法介绍给大家,很多操作我们都是通过CMD命令窗口设置的,最近用户反馈win7系统无法运行CMD命令,为 ...

  5. 从入门到入土:恶意代码Lab03-03.exe|分析实验|运行截图|问题回答|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. 不小心误删注册表exe,所有exe程序无法运行

    首先我陈述下误删的原因吧,与其说是误删不如说就是自己有 意删除的,电脑Windows7,我在安装CASS10.1的时候,由于一个补丁程序始终不能运行,弹框显示说CASS10.1.6补丁.exe不是有效 ...

  7. CLion编译的exe文件无法运行

    在编写Socket网络通信程序时,在CLion中可以运行,但是生成的exe文件无法运行,运行报错提示:无法链接动态库. 先说,解决方法: 在CLion中,修改CMAKElist文件,添加让连接其静态链 ...

  8. Keil运行密钥(pojie)软件运行时,exe程序无法运行/被删除/防火墙警告的解决方法

    Keil运行破//解软件运行时,exe程序无法运行/被删除/防火墙警告的解决方法 1.不要解压安装包,直接在压缩包里双击exe运行程序 这时解压软件报错弹出威胁防护警告(如果你解压后再运行exe,安全 ...

  9. VS2010 打包生成exe文件后 运行安装文件出现 TODO:文件说明已停止工作并已关闭

    一.VS2010 打包生成exe文件后  运行安装文件出现  TODO:<文件说明>已停止工作并已关闭 TODO: <文件说明>已停止工作 原因: 打包的时候在文件系统中建立了 ...

最新文章

  1. C#线程、前后台线程
  2. 连接池技术 Connection Pooling
  3. 恩布900手机客服,安卓版本号Entboost Android 1.0 正式公布
  4. P4211 [LNOI2014]LCA(离线 + 在线 做法)
  5. redis简单队列java_使用Redis的简单消息队列
  6. 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析
  7. Pentium Pro架构/流水线及其优化 (2) - 指令流水线 存储子系统详解
  8. windows 2003 iis 360防黑加固后不能使用
  9. Android 反编译 -smali文件对比java文件
  10. [转]关于Win32 Console的计时器
  11. 摄影测量——单片空间后方交会
  12. MacBook M1 Windows for ARM虚拟机体验
  13. 百度网盘怎么取消自动续费
  14. iOS开发者程序许可协议
  15. 计算机c盘一直减小咋办,C盘空间越来越小怎么办有效解决方案
  16. Oracle - 锁
  17. 通过excel文件在arcgis中点转面
  18. 在LINUX中安装Berkeley DB
  19. 如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍
  20. 阿里女合伙人身价达40亿,曾经月薪500小小前台,如何成功逆袭?

热门文章

  1. LeetCode 3 无重复字符的最长子串
  2. LeetCode 2 两数相加
  3. High Performance之android高性能之路
  4. 极光推送收不到推送消息
  5. (0109)iOS开发之CocoaPods Mac App的安装和使用
  6. (0049)iOS开发之数据精度处理四舍五入问题
  7. 均衡发展计算机教室材料,义务教育均衡发展材料.pdf
  8. IoT:template
  9. kernel笔记——中断
  10. Programming Entity Framework-dbContext 学习笔记第五章