c#只允许运行一个程序(转载)

本文深入探讨了程序开发领域的核心技术,包括前端、后端、移动开发、游戏开发、大数据开发等,介绍了各种关键技术及其在实际项目中的应用。此外,文章还涵盖了开发工具、测试、运维等实践层面的内容,旨在为开发者提供全面的技术指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

******************************************
 * ***************************************
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;

namespace Jackch
{
    
static class Program
    {
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>
        
/// 


        
//只允许运行一个程序
        [DllImport("User32.dll")]
        
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
        [DllImport(
"User32.dll")]
        
private static extern bool SetForegroundWindow(IntPtr hWnd);
        
private const int WS_SHOWNORMAL = 1;



        [STAThread]
        
static void Main()
        {

            Process instance 
= RunningInstance();
            
if (instance == null)
            {
               
//First f = new First();
                
//f.Show();
                  
                Application.EnableVisualStyles();
                
//Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
                
            }
            
else
            {
                MessageBox.Show(
"你已经运行了该程序!");
                HandleRunningInstance(instance);

            } 
            
        }


        
//不允许有两个程序同时启动

        
public static Process RunningInstance()
        {

            Process current 
= Process.GetCurrentProcess();

            Process[] processes 
= Process.GetProcessesByName(current.ProcessName);

            
//遍历正在有相同名字运行的例程 

            
foreach (Process process in processes)
            {

                
//忽略现有的例程 

                
if (process.Id != current.Id)
                {

                    
//确保例程从EXE文件运行 

                    
if (Assembly.GetExecutingAssembly().Location.Replace("/""//"==

                         current.MainModule.FileName)
                    {

                        
//返回另一个例程实例 

                        
return process;

                    }

                }

            }

            
//没有其它的例程,返回Null 

            
return null;

        }



        
public static void HandleRunningInstance(Process instance)
        {

            
//确保窗口没有被最小化或最大化 

            ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);



            
//设置真实例程为foreground window 

            SetForegroundWindow(instance.MainWindowHandle);

        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值