Maison >développement back-end >C++ >Pourquoi mon hook de clavier global WPF cesse-t-il de fonctionner et comment puis-je y remédier ?
Utilisation du crochet de clavier global (WH_KEYBOARD_LL) dans WPF / C# : dépannage de la disparition du rappel
Dans le code fourni, le crochet de clavier global est établi en utilisant la méthode SetHook. Cependant, il existe un problème potentiel où le délégué hook, défini en ligne dans l'appel SetHook, n'est pas correctement référencé et peut être récupéré. Cela entraîne l'échec de la fonction de rappel et aucun autre événement clavier n'est reçu.
Solution :
Pour résoudre ce problème, il est nécessaire de créer explicitement le délégué de rappel. et en conserver une référence dans l’application. Cela peut être fait en déclarant la variable déléguée en dehors de la méthode SetHook et en la passant comme argument :
public class App : Application { private KeyboardListener KListener; private LowLevelKeyboardProc hookCallback; private void Application_Startup(object sender, StartupEventArgs e) { hookCallback = HookCallback; KListener = new KeyboardListener(hookCallback); KListener.KeyDown += new RawKeyEventHandler(KListener_KeyDown); } private void Application_Exit(object sender, ExitEventArgs e) { KListener.Dispose(); } }
Dans ce code mis à jour :
En conservant une référence au délégué, la fonction de rappel restera dans la portée et continuera pour recevoir les événements du clavier comme prévu, résolvant ainsi le problème où le hook cesse de fonctionner après un certain temps.
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!