Je sais qu'il existe une question pour Windows Forms mais cela ne fonctionne pas dans la console, ou du moins je n'ai pas réussi à le faire fonctionner. J'ai besoin de capturer les pressions de touche même si la console n'a pas le focus.
Réponse
Trop de publicités?Vous pouvez créer un crochet de clavier global dans une application console aussi.
Voici le code complet et fonctionnel:
https://learn.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c
Vous créez une application console, mais vous devez ajouter une référence à System.Windows.Forms pour que cela fonctionne. Il n'y a aucune raison pour qu'une application console ne puisse pas référencer ce fichier dll.
J'ai simplement créé une application console en utilisant ce code et vérifié qu'il reçoit chaque touche enfoncée, que l'application console ait le focus ou non.
ÉDITER
Le thread principal exécutera Application.Run() jusqu'à ce que l'application se termine, par exemple via un appel à Application.Exit(). Le moyen le plus simple de réaliser d'autres tâches est de démarrer une nouvelle tâche pour effectuer ce travail. Voici une version modifiée de Main() du code lié qui le fait
public static void Main()
{
var doWork = Task.Run(() =>
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Application.Exit(); // Sortie rapide pour la démonstration seulement.
});
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
REMARQUE
Fournir éventuellement un moyen de quitter l'application Console, par exemple lorsqu'une combinaison de touches spéciale est enfoncée en fonction de vos besoins spécifiques. Dans la