zoukankan      html  css  js  c++  java
  • Winform禁止程序多开 &&禁止多开且第二次激活第一次窗口

    一、禁止多开问题,运用Mutex锁

    在Program.cs中运用Mutex锁

    bool createNew;
    using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createNew)) { if (createNew) { Application.Run(new Form1()); } else { MessageBox.Show("应用程序已经在运行中...") System.Threading.Thread.Sleep(1000); System.Environment.Exit(1); } }

    或者

    static void Main()
    {
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         //Application.Run(new MainForm());
    
          bool CreateNewForm;//返回是否赋予了使用线程的互斥体初始所属权 
          System.Threading.Mutex instance = new System.Threading.Mutex(true, "MutexName", out CreateNewForm);//同步基元变量 
          if (CreateNewForm)//赋予了线程初始所属权,也就是首次使用互斥体
          {
               Application.Run(new MainForm());
               instance.ReleaseMutex();
          }
          else
          {
               Application.Exit();
          }
    }

    二、禁止多开且第二次点击激活第一次窗口运用句柄

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Reflection;
    
    namespace NetCardUI
    {
        static class Program
        {
            ///<summary>
            /// 该函数设置由不同线程产生的窗口的显示状态
            /// </summary>
            /// <param name="hWnd">窗口句柄</param>
            /// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分</param>
            /// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零</returns>
            [DllImport("User32.dll")]
            private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    
            /// <summary>
            ///  该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。
            ///  系统给创建前台窗口的线程分配的权限稍高于其他线程。 
            /// </summary>
            /// <param name="hWnd">将被激活并被调入前台的窗口句柄</param>
            /// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns>
            [DllImport("User32.dll")]
            private static extern bool SetForegroundWindow(IntPtr hWnd);
    
            private const int SW_SHOWNOMAL = 1;
            private static void HandleRunningInstance(Process instance)
            {
                ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//显示
                SetForegroundWindow(instance.MainWindowHandle);//设置到最前端
            }
            private static Process RuningInstance()
            {
                Process currentProcess = Process.GetCurrentProcess();
                Process[] Processes = Process.GetProcessesByName(currentProcess.ProcessName);
                foreach (Process process in Processes)
                {
                    if (process.Id != currentProcess.Id)
                    {
                        if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == currentProcess.MainModule.FileName)
                        {
                            return process;
                        }
                    }
                }
                return null;
            }
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Process process = RuningInstance();
                if (process == null)
                {
                    Application.Run(new MainForm());
                }
                else
                {
                    HandleRunningInstance(process);
                    //System.Threading.Thread.Sleep(1000);
                    //System.Environment.Exit(1);
                }
            }
        }                
    }
  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/javier520/p/10672729.html
Copyright © 2011-2022 走看看