Hook des touches F5 d'une autre appli

Kheo Messages postés 21 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 10 décembre 2007 - 9 déc. 2007 à 20:27
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 10 déc. 2007 à 23:33
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 /
A voir également:

9 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
9 déc. 2007 à 20:34
Ben cherche "hook" sur le site y a plein de sources qui font ça.
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
10 déc. 2007 à 13:08
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
0
Kheo Messages postés 21 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 10 décembre 2007
10 déc. 2007 à 13:46
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 /
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 déc. 2007 à 14:01
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++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
10 déc. 2007 à 14:40
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
0
Kheo Messages postés 21 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 10 décembre 2007
10 déc. 2007 à 19:03
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 /
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 déc. 2007 à 21:25
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++ (@++)<!--
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 déc. 2007 à 23:25
GetForegroundWindow() est quasi instantané, ce handle est toujours maintenu pour y diriger les input events (entre autre).

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

AGILiCOMSavon
0
Rejoignez-nous