Maison >développement back-end >C++ >Comment puis-je envoyer de manière fiable des clés à une application en arrière-plan comme le Bloc-notes ?

Comment puis-je envoyer de manière fiable des clés à une application en arrière-plan comme le Bloc-notes ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 08:43:41926parcourir

How Can I Reliably Send Keys to a Background Application Like Notepad?

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!

Déclaration:
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