打开 Program.cs 代码文件,这里是程序的入口点,如下:

     static void Main(){ Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new frMain()); }

经过以下修改,就可以实现同一个进程只能打开一次的效果:

static void Main()
{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//1.这里判定是否已经有实例在运行//只运行一个实例Process instance = RunningInstance();if (instance == null){//1.1 没有实例在运行Application.Run(new FrMain()); }else{//1.2 已经有一个实例在运行HandleRunningInstance(instance);}}//2.在进程中查找是否已经有实例在运行
private static Process RunningInstance(){Process current = Process.GetCurrentProcess();Process[] processes = Process.GetProcessesByName(current.ProcessName);//遍历与当前进程名称相同的进程列表foreach (Process process in processes){//如果实例已经存在则忽略当前进程if (process.Id != current.Id){//保证要打开的进程同已经存在的进程来自同一文件路径if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName){//返回已经存在的进程return process;}}}return null;}//3.已经有了就把它激活,并将其窗口放置最前端
private static void HandleRunningInstance(Process instance){ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端}[DllImport("User32.dll")]private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);[DllImport("User32.dll")]private static extern bool SetForegroundWindow(System.IntPtr hWnd);


WinForm 限制同一个进程只能打开一次相关推荐

  1. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  2. 默认子进程与父进程属于同一个进程组,所以注意对接受到的信号的处理方式

    fork()时,子进程继承了父进程的进程组ID,所以父子进程默认属于同一个进程组,又因为同一个进程组的进程可以接受来自同一终端的各种信号所以当希望用键盘发送信号(如按下Ctrl+C)时,父子进程对接收 ...

  3. 同一个PC只能运行一个应用实例(考虑多个用户会话情况)

    原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) 1 class Program 2 { 3 private static Mutex m; 4 5 [STAThread] 6 stati ...

  4. Mac:Firefox的副本已经打开。一次只能打开一份Firefox

    1. 问题 火狐浏览器有个bug,打开时提示:"Firefox的副本已经打开.一次只能打开一份Firefox" 但其实检查后并没有打开任何窗口 2. 解决 重启和清缓存都没解决 杀 ...

  5. 一般程序句柄多少linux,一个进程能够打开最大文件句柄数设到多大才合适(Linux)...

    命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面).系统默认值1024. 对于一般的应用来说(象Apache.系统进程)1024完全足够使用.但是如何象squid.mysql ...

  6. 一个进程能够打开最大文件句柄数设到多大才合适(Linux)

    2019独角兽企业重金招聘Python工程师标准>>> 在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面).一般 ...

  7. android studio增加一个界面,Android Studio在同一个窗口中打开多个Project【附效果图附源码...

    Android Studio在同一个窗口中打开多个Project[附效果图附源码 Android Studio在同一个窗口中打开多个Project[附效果图附源码]

  8. 同一个页面显示多个html界面,浏览器怎么设置在同一个界面/窗口打开多个网页...

    有很多用户在使用浏览器的时候会使用浏览器打开多个页面进行使用,然后就会发现有很多个窗口,这样用户使用起来就会很不方便,很多电脑位置都会被占据,也容易关错窗口,对于用户的使用来说非常的不方便,那么用户在 ...

  9. 如何查看进程所打开的端口

    1.查看进程 [root@localhost ~]# ps -ef | grep elasticsearc | grep -v grep 记录进程的 进程ID 2.查看进程所打开的端口 [root@l ...

最新文章

  1. 模拟人类医生,自动生成靠谱医学报告,腾讯医典创新方法入选CVPR 2021
  2. mysqlsla slow-query常用用法
  3. Oracle加入Eclipse MicroProfile项目
  4. python3生成avi文件
  5. kubernetes 清理日志命令_Kubernetes之容器数据写满磁盘解决方法
  6. 【译】Getting Started With Ethereum and Building a Basic Dapp — Part 2
  7. Python Django 一对多之插入多条数据示例
  8. 听说Attention与Softmax更配哦~
  9. 【DVWA(五)】XXS存储型跨站攻击
  10. [剑指offer]面试题第[61]题[JAVA][扑克牌中的点数][HashSet][数组]
  11. mysql窗口界面表格式手工录入_mysql手工注入
  12. RedHat Linux 9.0 操作系统测试题2
  13. centos7图形化界面安装KVM虚拟机
  14. HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP
  15. Redis配置文件解读
  16. 通过Maven找java source源码方法
  17. POI 实现Word表格合并单元格(行合并)
  18. Node之使用os模块获取操作系统信息
  19. 服务器两广豪杰维护,逆水寒11月22日更新到几点 世界boss即将掉落逆水之寒
  20. 给定一个递增序列,a1 a2 ...an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤in),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小...

热门文章

  1. OpenCV摄像机videocapture camera的实例(附完整代码)
  2. Qt Creator文本
  3. QT的QFileSelector类的使用
  4. android中英文混合,搜狗手机输入法Android3.3中英混输无障碍之终结篇
  5. crash工具解析_IDA反汇编静态调试Android平台C++的so文件Crash入门
  6. Flink流计算编程--在WindowedStream中体会EventTime与ProcessingTime
  7. kerberos安装配置、配置kerberos server、client、日常操作与常见问题、卸载kerberos、hive整合kerberos
  8. Spring+mongodb集群集成(吐血教程) 转自:http://blog.csdn.net/qq_16497617/article/details/52817335
  9. Scala中映射的语法(对应Java中的Map集合的定义)
  10. 磁盘管理,磁盘挂在mount,挂载光盘镜像文件,挂在U盘,umount 卸载命令, dd