Comment utiliser correctement SetWindowsHookEx & CallNextHookEx
Je peux correctement le programme d'installation de windows crochet, mais j'ai confondu par la ligne à MSDN qui dit que "l'Appel de la fonction de CallNextHookEx de la chaîne de la prochaine procédure de hook est facultatif, mais il est fortement recommandé; sinon, d'autres applications qui ont installé des crochets ne recevrez pas de crochet de notifications et peut se comporter de manière incorrecte. Vous devriez appeler CallNextHookEx, sauf si vous avez absolument besoin pour prévenir la notification d'être vu par les autres applications.".
Je veux être une bonne programmation des citoyens et appeler la prochaine crochet. Mais, mon crochet procédure ressemble à ceci:
LRESULT CALLBACK CBTProc(int code, WPARAM wp, LPARAM lp)
{
if (code != HCBT_CREATEWND)
{
//What do I do here? It's not the event I requested so how do I pass it on?
return 0;
}
//It's the code we want (create window)
CallNextHookEx(...);
...
}
Donc, ce qui se passe dans la procédure de raccordement si le code n'est pas celle que je suis intéressé? Comment dois-je appeler la prochaine crochet?
Edit: Le principal problème est qu'une HHOOK est retourné à partir de la SetWindowsHookEx, et qui doit être transmise à la fonction de CallNextHookEx.
Mise à jour: Il semble que le crochet paramètre est ignoré sur les plates-formes NT:
http://msdn.microsoft.com/en-us/library/ms644974.aspx
http://www.klenotic.com/pl/null_hhook/
OriginalL'auteur Mark Ingram | 2008-10-17
Vous devez vous connecter pour publier un commentaire.
Selon les docs, la bonne chose à faire est de passer les arguments que vous avez reçu directement à CallNextHookEx, exactement comme vous les avez reçus. Vous devez également appeler CallNextHookEx indépendamment de savoir si vous a décidé à manier le crochet message.
Selon MSDN, le premier paramètre à
CallNextHookEx
est ignoré sur NT/XP/2003, et, pour les plus Win95 les systèmes d'exploitation, il devrait être leHHOOK
que vous avez reçu lorsque vous avez enregistré votre crochet avecSetWindowsHookEx
. Les docs ne spécifiez pas de valeur pour Windows 2000, mais depuis il fait partie de la NT de la famille, raisonnable suppose que c'est ignorée.Compte tenu de tout cela, un bon moyen de code de la méthode pour le NT-de la famille des systèmes d'exploitation pourrait être présent:
Cela permet de s'assurer que vous appelez toujours le crochet à la fin de votre traitement, et rend difficile accidentellement ajouter un
return
qui contournentCallNextHookEx
.OriginalL'auteur Charlie