`

C# winform 应用程序只打开一次(实现)

    博客分类:
  • C#
 
阅读更多

winform 有的时候只能打开一次,下一次不要打开的应用

 

下面是code

 

 static class ApplicationStart
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool ExisFlag = false;
            System.Diagnostics.Process currentProccess = System.Diagnostics.Process.GetCurrentProcess();
            System.Diagnostics.Process[] currentProccessArray = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process p in currentProccessArray)
            {
                if (p.ProcessName == currentProccess.ProcessName && p.Id != currentProccess.Id)
                {
                    ExisFlag = true;
                }
            }

            if (ExisFlag)
            {
                return;
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new ModelFileGenerator.View.×××());
            }
        }
    }

 

上面是第一种方案

 

在来看看第二种方案

 

 

/// <summary>
        /// window form show count
        /// </summary>
        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);
        [DllImport("kernel32.dll")]
        private static extern IntPtr LoadLibrary(string sLibName);

        /// <summary>
        /// application start
        /// </summary>
        public static void ApplicationStart()
        {
            Process instance = RunningInstance();
            if (instance == null)
            {
                System.Windows.Forms.Application.EnableVisualStyles();
                System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new ×××());
            }
            else
            {
                HandleRunningInstance(instance);
            }
        }

        /// <summary>
        /// application repeat start
        /// </summary>
        public static void ApplicationRepeatStart()
        {
            Process instance = RunningInstance();
            if (instance != null)
            {
                HandleRunningInstance(instance);
            }
        }

        /// <summary>
        /// Running process instance
        /// </summary>
        /// <returns>the running process</returns>
        public static Process RunningInstance()
        {
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName(current.ProcessName);
            ////Loop through the running processes in with the same name
            foreach (Process process in processes)
            {
                ////Ignore the current process
                if (process.Id != current.Id)
                {
                    ////Make sure that the process is running from the exe file.
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    {
                        ////Return the other process instance.
                        return process;
                    }
                }
            }
            ////No other instance was found, return null.
            return null;
        }

        /// <summary>
        /// handle running instance
        /// </summary>
        /// <param name="instance">the running process</param>
        public static void HandleRunningInstance(Process instance)
        {
            ////Make sure the window is not minimized or maximized
            ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
            ////Set the real instance to foreground window
            SetForegroundWindow(instance.MainWindowHandle);
        }

 Main函数

 public const string APP_NAME = "×××";
        private static bool isFirstAppInstance = true;
        private static Mutex mutex = new Mutex(true, APP_NAME, out isFirstAppInstance);
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (isFirstAppInstance)
            {
                    ApplicationManagerUtil.ApplicationStart();
            }
            else
            {
                   ApplicationManagerUtil.ApplicationRepeatStart();
            }
        }

 

好了 如果有什么问题请和我联系

 

 

0
1
分享到:
评论

相关推荐

    C#Winform实现打开第三方应用程序实例

    通过以上步骤,你就可以在C# WinForm应用中实现打开第三方应用程序的功能。这只是一个基础实例,实际应用中可能需要考虑更多细节,如进程通信、多进程管理等。理解并熟练使用`System.Diagnostics.Process`类,将使你...

    C#WinForm自动升级程序源代码

    描述中提到,这个自动升级程序是作者为WinForm应用程序设计的,适用于任何WinForm客户端。这意味着无论你的WinForm应用是什么,只要按照一定的接口或规范进行集成,都可以利用这个自动升级程序。作者将其开源共享,...

    C# Winform在MDI中打开一个子窗体关闭上一个子窗体

    在C# Winform编程中,MDI(Multiple Document Interface)多文档界面是一种常见的窗口布局方式,它允许在一个主窗口中嵌套多个子窗口,每个子窗口可以独立操作,但共享同一菜单栏、工具栏等资源。本文将深入探讨如何...

    C#实现Winform中打开网页页面的方法

    本文将详细介绍如何在C#的Winform应用程序中打开并控制网页页面。 首先,最简单直接的方法是使用`System.Diagnostics.Process.Start()`方法启动默认的浏览器来打开指定的网页。以下是一个简单的示例: ```csharp ...

    C# 只能运行一个winForm进程

    C# 单实例应用程序实现之winForm进程控制可以通过使用进程(Process)来实现,并且需要使用STAThread线程和Application.Run方法来启动WinForm应用程序。同时,使用Process.GetCurrentProcess和Process....

    C#winform判断窗体是否打开

    在C# WinForm开发中,窗体管理是创建复杂用户界面的一个关键方面,尤其是在处理多文档界面...掌握上述关键知识点,将帮助开发者更好地控制WinForm应用程序的窗体生命周期,避免资源浪费,提高程序的稳定性和响应速度。

    C#_winform操作excel(打开、内嵌)

    这是一个简单的示例,旨在展示如何在 C# WinForm 中打开和内嵌 Excel 文档。 标签解释 "C# winform excel"这个标签清晰地表明了本示例的技术栈:C#、WinForm 和 Excel。 知识点1:添加 Excel 引用 在使用 Excel ...

    C# 编写winform程序实现UDP通信

    在本文中,我们将深入探讨如何使用C#语言编写WinForm应用程序来实现UDP(User Datagram Protocol)通信。UDP是一种无连接的、不可靠的传输层协议,它提供了比TCP(Transmission Control Protocol)更快的数据传输,...

    C#winform窗体应用程序打开文件对话框

    在C# WinForm应用程序中,开发人员经常需要与用户交互,允许他们选择本地文件以便读取、写入或执行其他操作。"打开文件对话框"是实现这一功能的关键组件。这个对话框允许用户在他们的文件系统中浏览并选择一个特定的...

    C# winform 关闭打开的窗口

    在C# WinForm应用开发中,经常会遇到需要管理和关闭多个打开窗口的情况。本文将深入探讨如何在C#环境下实现WinForm窗口的关闭操作,以及如何关闭所有已打开的窗口。 首先,我们需要理解C# WinForm窗口(Form)的...

    C# winform页面多进程打开exe

    本主题聚焦于"C# WinForm页面多进程打开exe",这是一个关于如何在一个WinForm应用中并行运行多个外部可执行文件(.exe)的技术。在描述中提到,这个功能不仅允许加载多个exe,还能传递参数,这为程序的灵活性和功能...

    C#winform实现Excel导入数据库

    通过以上步骤,我们便可以实现C# WinForm应用程序从Excel文件导入数据到数据库的功能。这个功能广泛应用于数据迁移、数据分析和报表生成等场景,对于企业级应用尤其有价值。记住,在实际开发过程中,一定要遵循最佳...

    C#Winform图标素材.rar

    "C#Winform图标素材.rar"是一个包含各种图标资源的压缩包,专为C# WinForm开发者设计,用于提升应用程序的界面美观度和用户体验。 首先,我们需要了解C# WinForm是什么。C#是Microsoft公司推出的一种面向对象的编程...

    C# winform程序实现开机自启动,并且识别是开机启动还是双击启动

    Winform是.NET Framework中的一个强大工具,用于构建桌面应用程序,而C#是其常用的语言。下面我们将详细讲解实现这一功能的关键步骤和相关知识点。 1. 开机自启动: - 注册表编辑:在Windows系统中,可以通过修改...

    c#winform程序打包c#winform程序打包部署借鉴.pdf

    对于C# WinForm应用程序而言,这一过程同样不可或缺。本文旨在详细介绍如何使用Visual Studio对C# WinForm应用程序进行打包和部署,确保最终用户能够顺利安装并运行程序。 #### 二、准备工作 在开始打包之前,首先...

    C# winform 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件)

    在C# WinForm应用开发中,自动化打开和关闭可执行文件是常见的需求,这通常涉及到进程管理和操作系统交互。本文将详细讲解如何通过C# WinForm实现这一功能,以及如何关闭那些停止与系统交互的可执行文件。 首先,...

    c# winform程序右下角通知实现实例NotifyIcondemo

    在C# WinForm应用程序开发中,`NotifyIcon`组件是一个非常重要的工具,它允许程序员在系统托盘(屏幕右下角)显示一个图标,并通过该图标提供用户通知和交互功能。`NotifyIcon`实例通常用于那些不需要在任务栏中显示...

    C#Winform应用程序判定是否已运行实例.rar

    这个实例中,`"C#Winform应用程序判定是否已运行实例"`应该包含了示例代码,你可以参考这个项目来理解并应用到自己的程序中。 这个方法适用于那些需要保证单一实例运行的应用程序,如设置程序、监控工具等。使用...

    C# WinForm两种等待窗体的实现

    在C# WinForm应用开发中,用户界面的响应性是至关重要的。当程序进行耗时操作,如数据库交互、文件读写或者网络请求时,如果不做处理,用户...合理运用这些技术,可以显著提升C# WinForm应用程序的质量和用户满意度。

    C#_WinForm实现WebSocket及时通讯

    WinForm是.NET Framework提供的用于构建Windows桌面应用程序的库,它提供了一组丰富的控件和API,使得开发者能够方便地创建具有图形用户界面的应用程序。 WebSocket API是HTML5的一个重要组成部分,但C#也可以通过...

Global site tag (gtag.js) - Google Analytics