Vs2005 kbdhook

Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008 - 25 janv. 2008 à 22:33
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008 - 26 janv. 2008 à 01:20
bonjour,
j'ai cree une app avec une dll pour faire un hook global clavier, malheureusement celui ci ne fonctionne pas.

#include

"toolbox.h"static

HHOOK hkbhk = 0;
static

HINSTANCE hdll = 0;LRESULT CALLBACK KbdhkProc(

int nCode, WPARAM wParam, LPARAM lParam){

if(!nCode)

return CallNextHookEx(hkbhk, nCode, wParam, lParam);

if(wParam==WM_KEYUP){

MessageBox(0,
"ok c bon", 0, 0);

return 1;}

return CallNextHookEx(hkbhk, nCode, wParam, lParam);}

 

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)

{

if(dwReason == DLL_PROCESS_ATTACH) {

hdll = hDll;

hkbhk = SetWindowsHookEx(WH_KEYBOARD, KbdhkProc, hDll, 0);

}

if(dwReason == DLL_PROCESS_DETACH) {

UnhookWindowsHookEx(hkbhk);

}

return 1;}

Des idees?

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2008 à 23:13
Une excellente idée, que tu consultes les nombreux exemples que j'ai fait sur ce sujet.

La DLL c'est le code qui sera injecté dans les processus, ce n'est donc pas dedans qu'on appelle SetWindowsHookEx, c'est l'exe qui veut mapper la DLL dans les processus qui l'appellera. Idem pour démappage UnhookWindowsHookEx.

ciao...
BruNews, MVP VC++
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
25 janv. 2008 à 23:22
Merci de repondre aussi vite!
apparement le prob vien de la declaration des fonctions, si je dis pas de betise c la table dadresse des fonctions dans l'executable, mais en quoi cela gene t il le callback?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2008 à 23:48
Mais c'est heureux que ça ne fonctionne pas, tu crées une réentrance infinie en appelant le chargement de hook dans l'attachProcess de la dll, c'est du terrorisme d'OS.

ciao...
BruNews, MVP VC++
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
25 janv. 2008 à 23:50
le fait dappeller sethook a l'attach d'accord, mais pour la reloc?
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2008 à 23:55
La signature du callback est bonne, no prob d'adresse non plus.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2008 à 23:58
Autre chose, jamais de MessageBox ni autre fonction blocante dans un hook, il faut traiter le plus vite possible sinon le system repasse le message sans t'attendre.

ciao...
BruNews, MVP VC++
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 00:08
La msgbox c juste pour debug, apres c un postmsg.Ca devrai marcher,
merci encore!
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 00:09
et je ferais des efforts pour pour ecrire correctement
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 00:12
Un dernier truc,tout marche bien sauf que le hookmsg, malgre le return 1 n'est pas retire bien qu'il soit traite(msgbox).D'ou cela vient-il et comment y remedier?
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 00:13
pardon, je voulais dire uniquement le 1er hookmsg
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 janv. 2008 à 00:20
Essaie sans MessageBox, devrait aller.

ciao...
BruNews, MVP VC++
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 00:56
Une derniere chose, je n'arrive pas a traduire le vkcode en char avec toascii

BYTE kbs[256];
GetKeyboardState(kbs);
KBDLLHOOKSTRUCT* kbd;
kbd = (KBDLLHOOKSTRUCT*)wParam;
LPWORD ld =

new WORD;
ToAscii(kbd->vkCode, kbd->scanCode, kbs, ld, 0);
MessageBoxA((LPSTR)ld, 0, 0);

Une idee?
0
Sebopop2 Messages postés 34 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 16 juillet 2008
26 janv. 2008 à 01:20
c regle merci pour tout!
0
Rejoignez-nous