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
Libérer: 2025-01-05 08:43:41
original
974 Les gens l'ont consulté

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();
Copier après la connexion

Si Notepad n'est pas en cours d'exécution, vous pouvez le lancer en utilisant :

Process p = Process.Start("notepad.exe");
Copier après la connexion

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);
Copier après la connexion

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();
Copier après la connexion

Envoyer la clé :

Enfin, vous pouvez envoyer le message souhaité clé :

SendKeys.SendWait("k");
Copier après la connexion

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");
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal