Envoi de clés aux applications en arrière-plan
Le code fourni tente d'envoyer la touche "k" au Bloc-notes mais rencontre un problème. Pour résoudre ce problème, plusieurs aspects du code doivent être traités.
Gestion correcte du processus :
Le code suppose que le Bloc-notes est déjà en cours d'exécution. Pour gérer cela avec précision, vous devez obtenir le premier processus Notepad en utilisant :
Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
Si Notepad n'est pas en cours d'exécution, vous pouvez le lancer en utilisant :
Process p = Process.Start("notepad.exe");
Bring Notepad au premier plan :
Une fois que vous avez le processus du Bloc-notes, vous devez amener sa fenêtre principale au premier plan :
IntPtr h = p.MainWindowHandle; SetForegroundWindow(h);
En attente de stabilité d'entrée :
Avant d'envoyer des clés, vous devez attendre que l'application stabilise sa boucle d'entrée :
p.WaitForInputIdle();
Envoyer la clé :
Enfin, vous pouvez envoyer le message souhaité clé :
SendKeys.SendWait("k");
Problème possible avec les droits d'administrateur :
Il convient de mentionner que si le Bloc-notes s'exécute en tant qu'administrateur et que votre application ne l'est pas, cette méthode peut ne pas fonctionner .
Code modifié :
Voici le code modifié qui intègre les correctifs nécessaires :
[DllImport("User32.dll")] static extern int SetForegroundWindow(IntPtr point); Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); } else { p = Process.Start("notepad.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!