Heim  >  Artikel  >  Backend-Entwicklung  >  C# erlaubt nur zwei Möglichkeiten, einen WinFrom-Prozess zu starten

C# erlaubt nur zwei Möglichkeiten, einen WinFrom-Prozess zu starten

黄舟
黄舟Original
2016-12-21 14:43:441869Durchsuche

Methode 1: Nur die Ausführung mehrerer Prozesse verhindern

Klarkopie in Zwischenablage anzeigenPRint?
·········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(); //Diese beiden Zeilen implementieren den visuellen XP-Stil
System .Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main());
// Main ist das Hauptformular Ihres Programms, tun Sie es Diesen Satz nicht verwenden           Dieses Programm wird gerade beendet.
Application.Exit();//Programm verlassen .Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles(); / /Diese beiden Zeilen implementieren den visuellen XP-Stil
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run( new Main());
// Main ist die Hauptform Ihres Programms. Wenn es sich um ein Konsolenprogramm handelt, verwenden Sie diesen Satz nicht  
                                           Die gleiche Anwendung wird bereits ausgeführt. Bitte führen Sie nicht mehrere Programme gleichzeitig aus Gleichzeitig wird dieses Programm beendet. ", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
// Eingabeaufforderung, kann gelöscht werden.
Application.Exit();//Beenden Sie das Programm
}
}


Methode 2: Deaktivieren Sie die Ausführung mehrerer Prozesse und aktivieren Sie den vorherigen Prozess bei wiederholter Ausführung

Klarkopie in Zwischenablage anzeigen und drucken?
·········10········20·········30········40 · ········50·········60········70········80·········90·· ···· ··100········110········120········130········140······· 150
[STAThread]
public static void Main()
{ //Laufende Instanz abrufen = RunningInstance();
if (instance == null)
{ System .Windows.Forms.Application.EnableVisualStyles(); //Diese beiden Zeilen implementieren den visuellen XP-Stil
        System.Windows.Forms.Application.DoEvents();   
        //Es gibt   keine   andere   Instanz,   zeigen   unser   Formular.      
        Application.Run(new Main());   
    }   
    else  
    {   
        //Es   gibt   eine weitere   Instanz   dieses   Prozesses.      
        HandleRunningInstance(instance);   
    }   
}   
public static Process RunningInstance()   
{   
    Process current = Process.GetCurrentProcess();   
    Process[] Prozesse = Process.GetProcessesByName(current.ProcessName);   
    //Schleife   durch   die   laufenden   Prozesse   in   mit   dem   gleichen  Namen        Prozess      
        if (process.Id != current. Id)   
        {   
            //Stellen Sie sicher, dass der Prozess von der exe-Datei ausgeführt wird.      
            if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") ==. current.MainModule.FileName)   
            tanz.      
                Rückgabeprozess;   
            }   
        }   
    }   
    //Keine   andere   Instanz   wurde   gefunden,   gibt   null zurück.    
    null zurückgeben;    owHandle, WS_SHOWNORMAL);   
    //Setze   die   echte   Instanz   auf das   Vordergrundfenster   
    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;  
[STAThread]
public static void Main()
{
    //Holen Sie sich   die   laufende   Instanz.   
    Prozessinstanz = RunningInstance();
    if (instance == null)
    {
        System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
        System.Windows.Forms.Application.DoEvents();
        //Es gibt   keine   andere   Instanz,   zeige   unser   Formular.   
        Application.Run(new Main());
    }
    else
    {
        //Es   gibt   eine weitere   Instanz   dieses   Prozesses.   
   # .GetProcessesByName(current.ProcessName);
    //Schleife   durch   die   laufenden   Prozesse   in   mit   dem gleichen   Namen   
    foreach (Prozessprozess in. Prozesse)
    {
        //Ignorieren   der   aktueller   Prozess   
        falls (process.Id != current.Id)
        {
            //Stellen Sie sicher, dass der Prozess von der exe-Datei aus ausgeführt wird.   
            if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
            {
                //Gib   die   andere   Prozessinstanz zurück.   
                Rückgabeprozess;
              
 WindowHandle, WS_SHOWNORMAL) ;
    //Setze   die   echte   Instanz   auf   Vordergrundfenster
    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中文网(www.php.cn)!




Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn