Hook des touches F5 d'une autre appli

Signaler
Messages postés
21
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
10 décembre 2007
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Bonjour,

Est ce que quelqu'un pourrait me donner quelques infos sur la méthode à employer pour capter des touches dans une autre appli.
En fait je veux executer du code lorsque que j'appuie sur la touche F5 alors que le focus est sur une application cible.
Je veux détourner la touche F5 de cette appli vers mon code.

J'ai laborieusement essayé de trifouiller avec setWindowsHookEx, mais ca n'est pas très concluant.
Si vous aviez un ou deux sources exemple, ca pourrait m'aider, merci.

/ Kheo /

9 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Ben cherche "hook" sur le site y a plein de sources qui font ça.
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
En voici une de racpp ici qui montre un bel exemple de hook clavier.
A toi de faire ensuite le code correpondant à ce que tu désires.

AGILiCOMSavon
Messages postés
21
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
10 décembre 2007

Oui c'est un très bon exemple que j'ai déjà croisé, et que j'ai utilisé comme référence.
Mais comment restreindre le hook sur une appli en particulier. Cette appli en l'occurence je la récup a grand coup de EnumWindows de la lib psapi.

/ Kheo /
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Là je vais proposer quelque chose. Je ne l'ai jamais essayé et je ne sais donc pas si ça fonctionne.

1. Trouve et stock le HWND de la fenêtre avec FindWindow.

2. Lors du hook, récupère la fenêtre qui est en premier plan avec GetForegroundWindow.

3. Compare ensuite les 2 HWND.

C++ (@++)<!--
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
Comme le dit SAKingdom, récupère comme tu peux le handle de la fenetre que tu veux "hooker".
Ensuite, lorsque dans ton hook tu es averti de l'appui sur la touche F5, compare ce handle avec celui de la fenetre active ou regarde si la fenetre que tu veux hooker estactive (IsWindowEnabled).

Je ne sais pas laquelle des deux méthodes est la plus rapide (GetForegroundWindow ou IsWindowEnabled). SAKingdom?

<hr size="2" width="100%" />if (iCode < 0 || iCode != HC_ACTION)

    return CallNextHookEx(ghKbrdHook, iCode, wParam, lParam);



if (wParam == VK_F5)
{

    if (IsWindowEnabled(ghWnd)) // F5 pressed in main window?

    //Ce que tu veux faire
    else
         return CallNextHookEx(ghKbrdHook, iCode, wParam, lParam);

}
<hr size="2" width="100%" />
AGILiCOMSavon
Messages postés
21
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
10 décembre 2007

Ok merci les gars... trop bon je vais me tester ca dès que possible. J'étais tout simplement parti sur une autre piste ou je ne "hookais" que ma fenetre, alors qui faut faire un hook global est filtrer les messages.

Je vous confirme tout ca dès que j'ai testé !

/ Kheo /
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
La plus rapide entre GetForegroundWindow et IsWindowEnable, je l'ignore (c'est brunews qui a les sources de windows ici) mais je pencherais pour IsWindowEnable.

C++ (@++)<!--
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
GetForegroundWindow() est quasi instantané, ce handle est toujours maintenu pour y diriger les input events (entre autre).

ciao...
BruNews, MVP VC++
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
Merci Brunews pour cette information.
J'aurais comme SAKingdom penché sur IsWindowEnable, comme quoi, les apparences sont parfois trompeuses, même en prog!

AGILiCOMSavon