2009-02-03 8 views
1

Je rencontre un problème intéressant lors de l'implémentation d'un hook de clavier global.Delphi Keyboard Hook

J'ai écrit une DLL qui est utilisée pour définir le hook, puis une application (Delphi) qui charge la DLL et traite les résultats du hook. Cela a été fait cet après-midi sur mon PC au travail et après quelques tests j'ai pensé que ça fonctionnait à 100%.

Je viens de tester la même application et dll ici à la maison et je ne reçois aucune erreur, mais l'application ne semble pas obtenir de données non plus.

Les deux machines sont WinXP, bien que mon ordinateur de travail soit SP2 et celui-ci SP3.

Y a-t-il eu des modifications de l'API Win32 qui pourraient provoquer un dysfonctionnement ou le problème peut-il être lié à une mise à jour A/V/Spyware/MS récemment publiée? J'espère que quelqu'un ici saura une raison évidente que cela peut arriver avant que je passe des heures à déboguer.

Merci!

Répondre

0

Avez-vous un débogueur sur votre ordinateur personnel? Recevez-vous des messages via le crochet? Peut-il y avoir une autre application en train d'accrocher, et ne pas passer le message sur la chaîne crochet?

BTW: J'adore les machines virtuelles pour ce genre de test. Gardez une installation XP propre. Installez SP2 et testez votre application. Revenez pour nettoyer l'installation à nouveau et installez SP3. Essayez à nouveau votre application. De cette façon, vous saurez si son SP3, car il n'y a rien d'autre pour gâcher les choses. J'aime garder un ensemble d'instantanés avec différentes configurations.

0

Oui, je pourrais. Je n'ai pas installé Delphi sur cette machine, mais je pense que je devrais le faire. Je vais pour les fruits bas suspendus ici. S'il y a une réponse évidente, il n'y a pas besoin de passer par tous les problèmes de débogage et d'espérer trouver quel pourrait être le problème.

Mon premier soupçon est qu'il y a eu un changement dans l'API quelque part.

Comme je l'ai mentionné, cette application fonctionne parfaitement sur mon ordinateur de travail.

2

En fait, certains A/V n'aiment pas les crochets faits maison. J'ai le même problème avec mon talonneur sur certaines machines, et cela ne dépend pas de la version du Service Pack.

0

Quel type de crochet utilisez-vous? J'ai déjà utilisé le type WH_CBT et j'ai rencontré des problèmes lorsque certaines autres applications étaient en cours d'exécution. Un cas que je pourrais retracer à Trillian, qui semble faire aussi une sorte d'accrochage (et peut-être visse). En dehors de cela, je travaille actuellement sur une application qui utilise le WH_KEYBOARD -hook et cela fonctionne aussi bien sur SP2 que sur SP3. Le MSDN ne mentionne pas non plus de modifications liées au Service Pack.

Qu'est-ce que vous pouvez faire pour tracer le bug sur votre machine à la maison:

  • assurez-vous de vérifier toutes les valeurs de résultat de tous les appels API du système (et l'utilisation GetLastError en cas d'erreur)
  • fournissent une sorte de la production de débogage en cas d'erreur (par exemple comme boîte de message ou à un fichier texte)
  • option: log des messages d'état afin que vous savez ce qui se passe en interne
0

une alternative est pour utiliser un crochet de clavier de bas niveau. (Juste un paramètre différent de SetWindowsHookEx). Le hook est traité dans la boucle de message du thread d'enregistrement, et n'a donc pas besoin d'injecter une DLL partout. Et pour une raison étrange VirusScanners/Firewalls interférer beaucoup moins avec elle. Ils bloquent souvent silencieusement les dllinjection ou les crochets de clavier normaux. Supprime également le besoin de partager le hHook entre les processus si vous voulez qu'il fonctionne dans les anciennes versions de Windows. Et si vous abusez d'un raccourci clavier pour implémenter des raccourcis clavier globaux (vous avez vu beaucoup de choses), utilisez plutôt RegisterHotkey/http://msdn.microsoft.com/en-us/library/ms646309.aspx).

Questions connexes