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;