Comment puis-je définir le focus sur une application déjà en cours d’exécution?

J’ai développé une application Windows C # et créé un exe. ce que je veux, c’est que chaque fois que j’essaie d’exécuter l’application, si elle est déjà en cours d’exécution, elle active cette application, sinon une nouvelle application est ouverte

cela signifie que je ne veux pas ouvrir la même application plus d’une fois

Utilisez le code suivant pour définir le focus sur l’application actuelle:

[DllImport("user32.dll")] internal static extern IntPtr SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); ... Process currentProcess = Process.GetCurrentProcess(); IntPtr hWnd = currentProcess.MainWindowHandle; if (hWnd != IntPtr.Zero) { SetForegroundWindow(hWnd); ShowWindow(hWnd, User32.SW_MAXIMIZE); } 

Pour ce faire, vous pouvez PInvoke SetForegroundWindow () et SetFocus () à partir de user32.dll.

 [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd); // SetFocus will just focus the keyboard on your application, but not bring your process to front. // You don't need it here, SetForegroundWindow does the same. // Just for documentation. [DllImport("user32.dll")] static extern IntPtr SetFocus(HandleRef hWnd); 

En tant qu’argument, vous passez la poignée de la fenêtre du processus que vous souhaitez mettre en avant et vous concentrer.

 SetForegroundWindow(myProcess.MainWindowHandle); SetFocus(new HandleRef(null, myProcess.Handle)); // not needed 

Consultez également les ressortingctions de la méthode SetForegroundWindow sur msdna .

Utilisez Mutex pour lancer une instance unique de l’application. En outre, vous pouvez utiliser la classe Process pour rechercher votre application et SetFocus. Ici http://social.msdn.microsoft.com/Forums/da-DK/csharpgeneral/thread/7fd8e358-9709-47f2-9aeb-6c35c7521dc3

Utilisez la partie de code suivante pour la vérification de plusieurs instances d’un fichier exe et si son retour vrai lors du chargement du formulaire. Pour exécuter cette fonctionnalité dans votre application, using System.Diagnostics; notamment using System.Diagnostics; espace de noms

 private bool CheckMultipleInstanceofApp() { bool check = false; Process[] prc = null; ssortingng ModName, ProcName; ModName = Process.GetCurrentProcess().MainModule.ModuleName; ProcName = System.IO.Path.GetFileNameWithoutExtension(ModName); prc = Process.GetProcessesByName(ProcName); if (prc.Length > 1) { MessageBox.Show("There is an Instance of this Application running"); check = true; System.Environment.Exit(0); } return check; }