PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Hook (SetWindowsHookExA) vs événement
Hook (SetWindowsHookExA) vs événement
Débuté par xof, 28 mar. 2020 10:29 - 4 réponses
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 28 mars 2020 - 10:29
Bonjour,
J'ai une application qui fige parfois et je soupçonne fortement un hook d'être à l'origine des blocages.
On crée notre hook dans le constructeur d'un objet global au projet
:nHdlHook =API("user32","SetWindowsHookExA",13,&Affiche_Fenetre_EnCour,Instance(),0)

et on le détruit dans le destructeur, en sortie de programme.
SI :nHdlHook<>-1 ALORS
API("user32","UnhookWindowsHookEx",:nHdlHook)
FIN

Les developpeurs qui l'ont mis en place ne sont plus là et les survivants ne savent vraisemblablement pas ni pourquoi le hook a été utilisé, ni trop comment fonctionne cette API.
La procédure en question analyse quelques combinaisons de touches un peu "exotiques" et déclenche des petits traitements a priori simplement utiles pour les développeurs.
Pour autant, il me semble que la fonction événement de Windev pourrait faire l'affaire.

Avez-vous des conseils à me donner ?
D'avance, merci pour vos lumières.

--
Christophe Charron
Posté le 28 mars 2020 - 22:53
> :nHdlHook =API("user32","SetWindowsHookExA",13,&Affiche_Fenetre_EnCour,Instance(),0)

"SetWindowsHookExA",13 permet de scruter bas niveau les touches frappées sur le clavier AVANT que leur status ne soit modifié (avant toucheenfoncée, donc)

Je ne vois pas pourquoi tu rais besoin d'un truc pareil pour quoi que ce soit de standard dans une appli de gestion, c'est plutot le genre de truc qu'un debuggeur ou équivalent utiliserait

Donc, sauf si ton programme a besoin de faire des choses AVANT que le code normal et les événements standards des fenêtres windev ne soient déclenchées, ca ne sert à rien.
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 29 mars 2020 - 09:33
Bonjour Argus.

Merci pour cet éclairage. Cela confirme ce que je pensais. Car la procédure appelée ne fait que des tests sur des combinaisons de toucheenfoncee !!

--
Christophe Charron
Membre enregistré
355 messages
Popularité : +37 (39 votes)
Posté le 30 mars 2020 - 16:41
Bonjour Christophe,

J'ajouterai cependant que l'utilisation d'un Hook sur les événements clavier (le 13) permet de lancer la procédure "Affiche_Fenetre_EnCour" dans ton code même si l'application est en arriére plan.
En fait dans ce cas dès qu'une touche clavier est enfoncée depuis n'importe quelle application la procédure est appelée.
Reste à savoir ce que fait la procédure.

A+

--
Francis MOREL
http://www.SoftProtect.fr
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 08 avril 2020 - 16:03
Salut Francis,
et bien cette procédure teste les touches de fonction et selon, ouvre une fenêtre, active une trace ...
Ce que je faisais il y a longtemps en jouant avec les événements, me semble-t'il...
A bientôt se boire une bière ensemble ...

@+

--
Christophe Charron