Maison > développement back-end > Tutoriel C#.Net > C# autorise uniquement deux façons de démarrer un processus WinFrom

C# autorise uniquement deux façons de démarrer un processus WinFrom

黄舟
Libérer: 2016-12-21 14:43:44
original
1899 Les gens l'ont consulté

Méthode 1 : interdire uniquement l'exécution de plusieurs processus

afficher la copie en clair dans le presse-papierPRint ?
········10·········20···· · ···30·······40·······50········60········70········ 80 · ······90·······100·······110·······120·······130······ ·140 · ······150
[STAThread]
public static void Main()
{
bool ret;
System.Threading.Mutex mutex = new System.Threading. Mutex(true , application.ProductName, out ret);
if (ret)
{ System.Windows.Forms.Application.EnableVisualStyles(); //Ces deux lignes implémentent le style visuel XP
System Windows. .Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main());
// Main est le formulaire principal de votre programme, faites-le. ne pas utiliser cette phrase           Ce programme. nnCe programme est sur le point de se fermer ", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
// Le message d'invite peut être supprimé.
Application.Exit();//Quitter le programme .Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles(); / /Ces deux lignes implémentent le style visuel XP
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run( new Main());
// Main est la forme principale de votre programme, s'il s'agit d'un programme console, n'utilisez pas cette phrase  
                                     La même application est déjà en cours d'exécution, veuillez ne pas exécuter plusieurs programmes en même temps en même temps. nnCe programme est sur le point de se terminer.
Application.Exit();//Quitter le programme
}
}


Méthode 2 : désactiver l'exécution de plusieurs processus et activer le processus précédent lors d'une exécution répétée

afficher la copie en clair dans le presse-papiers ?
········10·······20·······30········40· ······50·······60·······70········80········90····· · ··100·······110·······120········130·······140·······150
[STAThread]
public static void Main()
{ //Obtenir l'instance en cours d'exécution
Process instance = RunningInstance();
if (instance == null)
{ System . Windows.Forms.Application.EnableVisualStyles(); //Ces deux lignes implémentent le style visuel XP
        System.Windows.Forms.Application.DoEvents();   
        //Il   n'y a pas   un autre   exemple,   montrez   notre   formulaire.      
        Application.Run(new Main());   
    }   
    else  
    {   
        //Il   existe   un autre   instance   de   ce   processus.      
        HandleRunningInstance(instance);   
    }   
}   
public static Process RunningInstance()   
{   
    Process current = Process.GetCurrentProcess();   
    Process[] processus = Process.GetProcessesByName(current.ProcessName);   
    //Boucle   à travers   les   processus en cours    dans   avec   le   même  nom      
    foreach (processus de processus dans les processus)   
    {   
        //Ignorer   le   actuel   process       
        if (process.Id != current. Id)   
        {   
            //Assurez-vous   sûr   que   le   processus   est   exécuté   à partir du   fichier exe   .      
            if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)   
            {   
                //Renvoyer l'   autre   instance de processus   .      
                processus de retour ;   
            }   
         }   
    }   
    //Aucune   autre   instance    a été   trouvée,   renvoie   null.    
    renvoie null ;   
}   
public static void HandleRunningInstance(Instance de processus)   
{   
    //Assurez-vous   que   la   fenêtre   n'est   pas   minimisée    ou   agrandie       
    ShowWindowAsync(instance.MainWindow Poignée, WS_SHOWNORMAL);   
    //Définir   la   réelle   instance   sur   la fenêtre   de premier plan    
    SetForegroundWindow(instance.MainWindowHandle);   
}   
[DllImport("User32.dll")]   
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);   
[DllImport("User32.dll")]   
private static extern bool SetForegroundWindow(IntPtr hWnd);   
const privé int WS_SHOWNORMAL = 1 ;  
[STAThread]
public static void Main()
{
    //Obtenir   l'   instance   en cours d'exécution.   
    Instance de processus = RunningInstance();
    if (instance == null)
    {
        System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
        System.Windows.Forms.Application.DoEvents();
        //Il   n'est pas   une autre   instance,   afficher   notre   formulaire.   
        Application.Run(new Main());
    }
    else
    {
        //Il   existe   une autre   instance   de   ce   processus.   
        HandleRunningInstance(instance);
    }
}
public static Process RunningInstance()
{
    Process current = Process.GetCurrentProcess();
    Process[] Processus = Processus .GetProcessesByName(current.ProcessName);
    //Boucle   à travers   les   processus   en cours d'exécution   dans   avec   le   même   nom   
    foreach (processus de processus dans les processus)
    {
        //Ignorer   le   processus   actuel   
        si (process.Id != current.Id)
        {
            //Assurez-vous   sûr   que   le   processus      est   exécuté   à partir de   le   exe   fichier.   
            if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
            {
                //Return   l'   autre   instance de processus   .   
                processus de retour ;
                }
    }
    //Aucun   autre   instance   a   trouvée,   retour   null. 
    return null ;
>
public static void HandleRunningInstance (instance de processus)
{
    //Assurez-vous   que   la   fenêtre   n'est   pas   minimisée    ou   maximisée    
    ShowWindowAsync(instance.MainWin dowHandle, WS_SHOWNORMAL) ;
    //Définir   la   réelle   instance   à   la fenêtre de premier plan   
    SetForegroundWindow(instance.MainWindowHandle);
}
[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; 

 以上就是C#只允许启动一个WinFrom进程的两种方法的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal