Winform 一次只能打开一个应用程序,再次打开,不会打开新应用程序

C#中仅运行一个程序实例的方法 在日常工作中,大家经常会遇到想要让程序同时只能有一个实例在内存中运行的情况。比如某些比较耗费资源的工具,或者占用了某些特定端口的程序,启动多个实例没有意义。那么我们是怎么实现这种限制的呢? 在C#中,一般我们有两种办法,都非常简单。 使用Mutex 在C#中有两种Mutex,一种是Local的,仅在创建的进程中可见,主要作用就是实现进程内线程之间的同步。还有一种是有名字的,也叫Global M... 阅读详情
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Configuration;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Reflection;

namespace USBKEY
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //0106add  一次打开一个应用程序
            Process instance = RunningInstance();
            if (instance != null)
            {
                if (instance.MainWindowHandle.ToInt32() == 0) //是否托盘化
                {
                    MessageBox.Show("程序已打开并托盘化");
                    return;
                }
                //1.2 已经有一个实例在运行
                HandleRunningInstance(instance);
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }


       

        #region 确保程序只运行一个实例
        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);
        #endregion

       

    }
}

这是C# Program主程序代码,无法实现应用程序托盘化后再次点击,托盘栏程序自动还原的功能.

http://www.cnblogs.com/qingse/archive/2013/02/16/2913430.html 点击打开链接 该链接是某人的一个源代码,实现了用窗体自带最小化按钮,最小化后再次点击,可以重新还原打开程序,但经过测试无法在托盘栏实现该功能

C# WinForm 程序单实例运行,再次运行时激活前一个实例 一个简单的小程序,演示了winform程序如何运行单实例。当有实例运行时,再次单击,会激活第一个实例。 附主要源码: Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; names 阅读详情

相关推荐

winform DMI应用程序,可打开、排列和关闭子窗口

winform DMI应用程序,可打开、排列和关闭子窗口 实现功能如下: ①可打开多个子窗口 ②关闭当前活动子窗口 ③关闭应用程序 ④排列已打开的子窗口 ⑤关闭所有子窗口 操作如下: ⑥创建窗体5-6-1、5-6-2,其中5-6-2作为被打开的子窗体,所需控件:MenuStrip,Name属性值如下: 5-6-1代码如下: //窗体的“Load”事件 private void _3_6_1_Load(object sender, EventArgs e) { //

前端小白的逆袭 1228

c#winform/wpf限制只能运行一个(互斥体)

在wpf中需要在app.xaml.cs里面写这段代码。

weixin_58760781的博客 857

用Visual C#开发WinForm的应用程序

举例如下:当我在自我介绍的时候(其实就是在定义我的属性),我会说"我的名字叫xx","我的年龄是xx","我的邮箱是xx"……StartPosition 这个属性有点类似于"Location"属性,"Location"属性定义的是WinForm的绝对位置,而本属性定义的是WinForm的相对属性。本属性的值定义为"CenterScreen"、"Manual"、"WindoowsDefaultLocation"、"WindowsDefaultBounds"、"CenterParent"

biyusr的专栏 979

C# 单例模式(一个窗体只能打开一次子窗体)

单例模式(一个窗体只能打开一次子窗体)

m0_47020592的博客 1286

C#实现限制只能启动一个WinForm进程的两种方法

的互斥体来确保只有一个进程可以获得对互斥体的所有权。如果当前进程能够成功获取互斥体的所有权,那么它就是第一个启动的进程,并且可以继续执行应用程序的逻辑。否则,如果无法获取互斥体的所有权,说明已经有一个进程在运行该应用程序,我们可以弹出一个消息框来提示用户。使用互斥体是一种简单直接的方法,而使用进程命名管道则更加灵活,可以进行更多的进程间通信操作。否则,如果连接超时,则说明没有其他进程在运行,我们可以继续执行应用程序的逻辑。进程命名管道是一种高级的进程间通信机制,可以用于实现进程之间的通信和同步。

XisVisual_Basic的博客 1088

Winform只允许打开一个实例

Winform窗体只允许打开一个实例。第二次打开报错。

C#(WinForm)实现软件只能启动一次,再次启动会将已启动的软件置顶显示

修改WinForm程序的Program.cs文件,实现程序只能被启动一次,如果当前软件正在运行时再次点击软件exe文件会将当前运行的软件中置顶显示。 代码如下: static class Program     {         ///           /// 该函数设置由不同线程产生的窗口的显示状态。          ///           /// 窗口句柄

heping860728的专栏 2279

基于ResNet-50的猫狗分类训练

基于ResNet-50的猫狗分类python训练

weixin_46352497的博客 1004

C#设置同一个winform程序一次只能运行一个

用C#开发winform桌面程序时,同一个exe程序,默认是可以启动多个实例的。但很多时候,我们只希望程序启动一个实例,可以通过以下代码进行设置: staticclassProgram { [DllImport("user32.dll",EntryPoint="SetForegroundWindow")] publicstaticexternintSetForegroundWindow(IntPtrhwnd); ...

ztnhnr的专栏 950

riscv32-gcc工具链实战:从下载到编译的完整指南

本文提供了一份详尽的riscv32-gcc工具链实战指南,涵盖从官方渠道下载预编译版本、正确选择riscv32-glibc版本、配置环境变量到实战编译的全过程。通过清晰的步骤和避坑指南,帮助开发者快速搭建稳定的RISC-V交叉编译环境,并成功编译从Hello World到Linux内核的程序。

s3t4u的博客 676

HFSS与AI融合:智能算法如何重塑天线设计流程

本文探讨了HFSS与AI融合如何通过智能算法革新天线设计流程。在5G/6G通信时代,AI技术如机器学习和遗传算法显著提升了高频电磁场仿真效率,将传统设计周期从数周缩短至数小时,并优化了天线性能。文章详细介绍了AI与HFSS的集成策略、关键技术突破及典型应用案例,展示了智能算法在天线设计中的巨大潜力。

weixin_29035147的博客 779

c# 控制winform程序只能打开一个

这是完整的代码,你加在你的程序里面就可以了 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; using Sy

bjut_yue的专栏 1534

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2322

Winform 控制同一窗体只能打开一次的方法!

方法一:        ///         /// 控制只弹出一个子窗体        ///         /// 子窗体类型        public void FilmShow(Type type)        {            Form[] f = this.MdiChildren;            foreach (Form form in f)            {                if (form.GetType().Name == type.Name

圣卡西的球门 1137

保姆级教程:在树莓派5B上用AI Kit跑YOLOv8,实测134fps的完整配置流程

本文提供了一份详细的树莓派5B搭配AI Kit部署YOLOv8的教程,从硬件组装到模型转换、优化和部署,最终实现134FPS的高帧率推理性能。通过Hailo-8L AI加速模块和HEF模型转换,这套方案为边缘AI计算提供了强大支持,适用于智能监控、无人机视觉导航等应用场景。

weixin_28725407的博客 450

GB28181协议心跳机制:从标准解读到代码实现的保活策略

本文深入解析GB28181协议中的心跳机制,从标准解读到代码实现,详细介绍了保活策略的核心价值和底层逻辑。通过实战案例和技术要点,帮助开发者优化心跳间隔、超时次数等参数配置,提升安防监控系统的可靠性和性能。文章还提供了代码实现的防坑指南和特殊场景处理建议,适用于各类网络环境下的设备在线状态管理。

weixin_29611239的博客 106

将PPT嵌入Winform:一个强大的C Winform应用程序

将PPT嵌入Winform:一个强大的C# Winform应用程序 【下载地址】CWinform打开PPT并嵌入到Winform中 C# Winform打开PPT并嵌入到Winform中本仓库提供了一个C# Winform应用程序的资源文件,该应用程序可以打开PPT文件并将其嵌入到Winform窗体中 ...

gitblog_09812的博客 1033

ipc$漏洞攻击(实验)

我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。5.然后,我们物理连接到靶机上,到了两分钟后,我们可以用命令看到,这个pp45的用户就出现了。

2301_76361674的博客 3255

创建 WinForm 应用程序

创建 WinForm 应用程序 创建 WinForm 项目 点击【文件】>【新建】>【项目】选项,进入【新建项目】界面,选中【Windows窗体 应用程序】.并设置项目的名称、位置及解决方案名称。如下图所示。 2.创建空白窗体 选择图6-7项目区域中的【Windows窗体应用程序】后,点击【确定】按钮,创建一个空 白窗体,如下图所示 3.向窗体中添加控件 向图6-8所示的空白窗体中拖入一个Label文本标签与Button按钮,界面如下图所示。 4.设置控件的属性 在上图中,添加了 La

mmmjtt的博客 4837

Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)

摘要 本文介绍了基于Spring Boot 3.2和Spring AI 1.0.0-M4构建智能客服系统的技术方案。系统采用分层架构设计,集成DeepSeek API提供自然语言处理能力,使用MyBatis和H2数据库实现数据持久化,并通过Thymeleaf+Bootstrap构建前端界面。文章详细阐述了项目的技术栈选择、Maven依赖配置、应用架构设计,以及各模块的功能划分,为开发者提供了完整的智能客服系统实现方案,涵盖从后端服务到前端交互的全流程开发指导。

博客 3847

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

winform 子窗体只能打开一次该怎么做

你可以用这样 很简介的代码: Form f = Application.OpenForms["FormName"]; //查找是否打开过Form1窗体 if (f == null) //没打开过 { FormName fname = new FormName(); fname.Mdi

kuangshi2008的专栏 884

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WinForm窗体应用程序只能运行一个实例

说明:即程序不能进行多开,只能运行一个。

275

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WinForm 应用程序中开启新的进程及控制

在 Winform 里有时会需要打开另一个应用程序或文件,比如打开浏览器、打开word文档、打开文件夹和打印文件等等。本文介绍用 C# 在 Winform 中打开一个新进程,完成上述功能。 using System.Diagnostics 该命名空间提供与系统进程、事件日志、性能计数器的交互。其中与进程相关的两个基本类是 System.Diagnostics.Process 和 System.

码农 1277

winform 应用程序 只启动一次

winform 应用程序只启动一次 思路:捕获系统进程,是否和当前进程有一致的 引用程序集:using System.Diagnostics; static class Program { /// &lt;summary&gt; /// 应用程序的主入口点。 /// &lt;/summary&gt; ...

Luffy's blogs 1223

单例模式(Winform窗体的实现,解决再次打开报错 内存已经释放问题)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入   在我的设...

qq_37142766的博客 1649

winform应用程序初识——常见组件学习

winform相关概念以及组件学习

HYHDYK的博客 2881
上一篇: C# 判断字符串是否为2进制,8进制,10进制,16进制
下一篇: C# 通过类或者数据表名获取主键字段(没有外键)
浅笑_微梦
博客等级 码龄9年 106粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值