摘要

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

解决方案

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

代码如下:

static class Program
{ private const int WS_SHOWNORMAL = ;
[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

最新文章

  1. How do I see all foreign keys to a table or column?
  2. Android程序进行混淆,在导出签名apk包时出错!
  3. 通过sharedpreferences实现记住密码功能
  4. nios II--实验4——按键中断软件部分
  5. php安装json模块
  6. delphi 最全日期格式_DateUtils时间单元说明
  7. fzuoj Problem 2182 水题
  8. 解决mybatis使用枚举的转换
  9. DHCP协议
  10. Excel多表合并的宏
  11. Java 方法(变量)修饰符的使用顺序
  12. mysql使用use db出现夯住问题
  13. Linux-负载均衡LVS
  14. js 手动插入meta标签和script标签
  15. ping不通,配置dns
  16. vue实现添加与删除图书
  17. 【Python】统计个人新浪微博词频并给出相应的柱状图
  18. 高可用hadoop的hdfs启动的时候namenode启动不了
  19. Mysql 5.7 忘记root密码或重置密码的详细方法
  20. RN在Android打包发布App

热门文章

  1. Redis的五大数据类型
  2. mac安装ocr
  3. 创建.symlnk文件
  4. HTTP2.0新特性
  5. Centos7下yum安装zabbix-server的部署(一)
  6. kafka查看消费数据
  7. 解决连不上dl.google.com和dl-ssl.google.com
  8. [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件
  9. net mvc webapi 实用
  10. Angular 2的表格控件