OVH Cloud OVH Cloud

SetWindowsHookEX sous XP

4 réponses
Avatar
news.wanadoo.fr
Bonjour à toutes et tous,

Une question concernant cette fonction : SetWindowsHookEx...

Je cherche à la faire fonctionner avec le premier paramètre réglé à
WH_CBT...

La fonction renvoie un handle (de hook) correct... mais la fonction de
rappel, elle, ne reçoit pas de message...
Du moins, elle reçoit UN message (celui qui correspond à l'ouverture d'une
fenêtre de mon application)...

Que la fonction de rappel indiquée dans l'appel à SetWindowsHookEx soit
située dans mon EXE ou dans une DLL, le résultat est le même...

J'utilise Borland C++ Builder 6...

Avez-vous réussi à faire fonctionner cette fonction dans ce contexte ?
Serait-ce un problème de droit (si oui, je n'ai pas trouver de document sur
le sujet... y compris dans msdn.microsoft.com) ?

Remarque complémentaire... si j'utilise SetWindowsHookEx en passant
WH_KEYBOARD_LL (ou WH_KEYBOARD) ça marche bien : ma fonction de rappel est
effectivement .... rappelée.

Merci pour vos réponses éventuelles,

F.Otho

4 réponses

Avatar
Christian ASTOR
news.wanadoo.fr wrote:

Je cherche à la faire fonctionner avec le premier paramètre réglé à
WH_CBT...

La fonction renvoie un handle (de hook) correct... mais la fonction de
rappel, elle, ne reçoit pas de message...
Du moins, elle reçoit UN message (celui qui correspond à l'ouverture d'une
fenêtre de mon application)...

Que la fonction de rappel indiquée dans l'appel à SetWindowsHookEx soit
située dans mon EXE ou dans une DLL, le résultat est le même...

J'utilise Borland C++ Builder 6...

Avez-vous réussi à faire fonctionner cette fonction dans ce contexte ?



Voir thread récent de "cyan", où, après une petite correction, l'exemple
marchait correctement...
Avatar
François
>> Je cherche à la faire fonctionner avec le premier paramètre réglé à
WH_CBT...
La fonction renvoie un handle (de hook) correct... mais la fonction de
rappel, elle, ne reçoit pas de message...

Que la fonction de rappel indiquée dans l'appel à SetWindowsHookEx soit
située dans mon EXE ou dans une DLL, le résultat est le même...

J'utilise Borland C++ Builder 6...

Avez-vous réussi à faire fonctionner cette fonction dans ce contexte ?



C.Astor dit :
Voir thread récent de "cyan", où, après une petite correction, l'exemple
marchait correctement...



Merci pour votre réponse rapide,

Je viens d'y jeter un oeil et on y parle effectivement de cette fonction
avec
le paramètre (WH_CBT) mais j'ai, peut-être, oublié de dire que je voulais
capt(ur)er les messages de TOUTES les fenêtres (y compris celle qui ne font
pas partie de mon application)... Dans le 'thread de cyan', il est fait
usage
de GetCurrentThreadId() ... et, ça, ça ne m'intèresse pas; du moins dans
le cas qui me préoccupe.
Avatar
Christian ASTOR
François wrote:

le paramètre (WH_CBT) mais j'ai, peut-être, oublié de dire que je voulais
capt(ur)er les messages de TOUTES les fenêtres (y compris celle qui ne font
pas partie de mon application)... Dans le 'thread de cyan', il est fait
usage de GetCurrentThreadId()



Il suffit de mettre NULL à la place.
Avatar
François
>From: "Christian ASTOR"
François wrote:

le paramètre (WH_CBT) mais j'ai, peut-être, oublié de dire que je voulais
capt(ur)er les messages de TOUTES les fenêtres (y compris celle qui ne
font
pas partie de mon application)... Dans le 'thread de cyan', il est fait
usage de GetCurrentThreadId()



Il suffit de mettre NULL à la place.



Oui, je sais ... et c'est justement ce qui semble ne pas fonctionner...

Quand je remplace WH_CBT par WH_KEYBOARD_LL ... (et que j'appelle la
fonction de rappel qui va bien, bien sûr). ça fonctionne...

Je vais essayer sur un windows 'neuf' car je me demande si finalement il
pourrait pas y avoir une appli. mal développée qui filtrerait déjà les
Hooks.. avec le paramètre WH_CBT (par exemple, une fonction qui ne ferait
pas de CallNextHookEx...) ...

Merci,

F.Otho