HOOK CLAVIER

bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004 - 10 nov. 2003 à 01:01
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 mars 2006 à 13:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17818-hook-clavier

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 mars 2006 à 13:43
Si ne décharge pas c'est qu'il y a un malaise de conception car elle DOIT être déchargée.
zibo3 Messages postés 57 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 7 octobre 2009
29 mars 2006 à 13:38
Bonjour,

J'utlise actuellement un hook global pour recuperer des événements windows et tout fonctionne bien.
Sauf que lorsque j'utilise la fonction UnhookWindowsHookEx, ma dll qui s'est attaché à tous les processus grace au SetWindowsHookEx ne se détache pas de tous les processus. Comment faire pour s'assurer que ma DLL se decharge bien de tous les process à laquelle elle c'est attaché?
Ne me dites pas qu'il faut tuer le processus parce que justement c'est ce que je veux éviter.
Merci
Sn00bino_roi_du_petrol Messages postés 17 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 10 juillet 2006
4 mars 2006 à 21:54
C 'est ce que je fais.A part que j' ai un a au lieu d' un lib.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 mars 2006 à 20:35
Juste compiler avec le h et lib de la DLL.
Sn00bino_roi_du_petrol Messages postés 17 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 10 juillet 2006
4 mars 2006 à 17:11
Excuse moi je me suis mal exprimé je voulais parler de la boite de dialog du hook.

Pour que cela fonctionne chez moi il faut que la boite de dialog du hook soit en premier plan et que une fenetre notepasd soit ouverte(non minimizé)

J' ai testé le exe donné dans le zip et il marche exactement comme tu viens de le dire(pas besoin que le hook soit en premier plan)

Il y a t-il des chose speciales a faire dans le projet ?

Merci d' avance,

++
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 mars 2006 à 16:36
Je viens de tester avec CETTE fenêtre de navigateur (IE chez moi) en 1er plan (et focus), j'appuie F8 et date/heure son bien insérés dans la 1ere notepad ouverte qui a été trouvée.
Sn00bino_roi_du_petrol Messages postés 17 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 10 juillet 2006
4 mars 2006 à 16:19
Non en fait ton code marche.Mais ne marche plus si ta fenetre n 'est pas en premier plan.Je m' en etais pas rendu compte puisque a chaque fois je mettais notepad en premierplan.
Cela dit, comment faire pourque cela marche meme quand on n' est pas en premier plan ?
Sn00bino_roi_du_petrol Messages postés 17 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 10 juillet 2006
4 mars 2006 à 15:00
Je suis sous devc++ et j' ai essayer de compiler ton code.
Y me met des erreurs qui partent en changeant __stdcall

#if BUILDINGDLL
#define DLL __declespec(dllexport)
#else define DLL __declespec(dllimport)

et devant les fonctions je remplace _stdcall par DLL.

tout sa ce compile mais le hook n' a aucun n 'effet.
Sa m' est deja ariv" avec d' autre hook.Je n' ai jmais reussi a avoir un hook.

SI quelqun pouvait m' eclairer.

Merci d' avance
diiplayer Messages postés 64 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 24 octobre 2007
17 déc. 2005 à 13:18
Merci bien ! Je profite de ma présence pour vous souhaiter un joyeux noel!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2005 à 19:02
Impossible d'"intégrer" une DLL en VB comme on le fait en C à la compilation avec un lib.
Suffit de mettre la déclaration API de la DLL dans un bas VB:
Declare Function Intercepte().... As Long
Declare Sub Relache()...
et tu utilises les 2 fonctions.
diiplayer Messages postés 64 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 24 octobre 2007
16 déc. 2005 à 17:12
Salut, je crois que ta dll pourrait m'être utile pour un programme que je fait en Visual basic 6, le problème que je rencontre c'est que j'ignore comment l'utilisé : / (comment l'intégré a mon projet et comment faire pour y faire appelle). Sa serait sympa si tu pouvais m'éclairer un peu sur le sujet.
etienne3d Messages postés 1 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 13 février 2005
13 févr. 2005 à 10:45
Salut,
Sous Dev-c++, pour la compilation de la dll hook clavier, j'utilise les parametres pour le compilatuer:

-DBUILDING_DLL=1
-strip-unneeded
-s
-mdll
-fPIC

et les parametres pour le linker:

--add-stdcall-alias
--kill-at
-A
-k
-s
-strip-unneeded
-mdll
-def WinAmp.def

dans les options du projet.

Le resultat donne 4 warnings (2x2):

Warning C:\Documents and Settings\etienne3d\Bureau\Bureau\cppfrance_source_17818\Dll\Warning resolving _Intercepte by linking to _Intercepte@0

Warning C:\Documents and Settings\etienne3d\Bureau\Bureau\cppfrance_source_17818\Dll\Warning resolving _Relache by linking to _Relache@0

en 2 fois de suite mais il compile.

L'executable par contre renvoie ses 2 erreurs:

[Linker error] undefined reference to `Intercepte@0'
[Linker error] undefined reference to `Relache@0'
C:\Documents and Settings\etienne3d\Bureau\Bureau\cppfrance_source_17818\WinAmp\Makefile.win [Build Error] [WinAmp.exe] Error 1

Please help me! g essayer de remplacer "__stdcall" par "__declspec (dllexport) ", je reussi plus ou moins à compiler mais le hook cesse de fonctionner dès que je bouge la souris.
Quelqu'un a t-il une soluce et qui est dans le meme cas?
GWW Messages postés 1 Date d'inscription vendredi 26 mars 2004 Statut Membre Dernière intervention 31 août 2004
31 août 2004 à 17:22
j ai le meme probleme que toi betapoil...
avi aux pros!!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 août 2004 à 21:17
Aucune idee, je ne pratique pas. Faut regarder les nombreux exemples du SDK s'il n'y aurait pas ce qui t'interesse.
betapoil Messages postés 8 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 10 février 2005
13 août 2004 à 21:09
Salut,

J'ai encore une petite question bien bizarre ....
encore merci pour ton exemple; je commence à bien me débrouiller avec les hook systèmes. Mais connais tu un moyen pour intercepter et envoyer des touches à une application DirectX.

(Les hooks systèmes classiques ne donnent rien sous une app DirectX, je pense que cela vient du fait que DX utilise DirectInput mais j'arrive pas à trouver d'infos)
betapoil Messages postés 8 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 10 février 2005
11 août 2004 à 21:10
ok, merci
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 22:29
Si tu avais lu MSDN tu aurais vu:
lParam, bit 31: Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.
Alors si on ne controle pas le dernier bit (avec le masque) on enverra 2 fois F5 (down et up de la touche).
betapoil Messages postés 8 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 10 février 2005
5 août 2004 à 22:18
Salut, BruNews

J'ai pas mal potassé ton exemple et ca m'a bien aidé, j'aimerai juste une précision :

LRESULT CALLBACK kbdFunct(int nCode, WPARAM wParam, LPARAM lParam) {
if(nCode >= 0) {

if(wParam != VK_F8) goto defRet;
if(lParam & 0x80000000) goto defRet; // 1 SEULE FOIS <<-- ICI

Merci de m'expliquer l'intéret de cette ligne, et le fonctionnement de lParam. Visiblement tu l'a controlé avec un masque mais je n'arrive pas à comprendre ce que tu cherches a détecter.

Merci
sympman Messages postés 4 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 28 juillet 2004
28 juil. 2004 à 15:46
Merci !
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
28 juil. 2004 à 15:30
FindWindow si tu connais le nom de ta fenetre je pense...

++ Glipper
sympman Messages postés 4 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 28 juillet 2004
28 juil. 2004 à 15:23
Merci !

Connais tu un moyen pour obtenir le handle d'une fenetre ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 juil. 2004 à 11:15
La desole je ne peux rien, la ligne avec DialogBoxParam respecte scrupuleusement la syntaxe win32, faut voir avec le sabir de BC++ que je ne pratique pas.
betapoil Messages postés 8 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 10 février 2005
26 juil. 2004 à 08:20
Bonjour,

Je débute en C++, edt j'essaie de comprendre les hooks, j'ai globalement compris votre exemple.
Mais lorsque je décide de le recompiler (sans modifs pour commencer) avec BC++ 5.0 j'obtient une erreur :

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR, int)
{
DialogBoxParam(hinst, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0); /// <- ICI <-
return 0;
}

voila le détail :

[C++ Erreur] WinAmp.cpp(35): E2034 Impossible de convertir 'int (__stdcall *)(void *,unsigned int,unsigned int,long)' en 'int (__stdcall *)()'
[C++ Erreur] WinAmp.cpp(35): E2342 Mauvaise correspondance de type dans le paramètre 'lpDialogFunc' ('int (__stdcall *)()' désiré, 'int (__stdcall *)(void *,unsigned int,unsigned int,long)' obtenu)

Merci de me donner un petit coup de main ;-)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 juil. 2004 à 14:53
J'ignore tout du monde java. Ceci dit, une fenetre que soit creee par java ou autre, c'est toujours le systeme qui la fait a la finale donc aucune raison qu'on ne l'intercepte pas du moment qu'on obtient son handle.
sympman Messages postés 4 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 28 juillet 2004
22 juil. 2004 à 14:39
Salut
existe t'il un hook qui permette de controler une applet java.
Je m'explique, plutot que d'ecrire du texte dans une fenetre bloc note par exemple, je souhaiterais ecrire dans une applet (qui est aussi dans une fenetre d'ailleurs).
Merci d'avance !
cs_Omeya Messages postés 28 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 10 août 2006
22 déc. 2003 à 14:57
Ton hook est excellent BruNews ! Javais cherché de nombreux moyens de faire un hook, sur le net, mais aucun ne me donnait satisfaction :(

Merci Bocou pour ton aide :))
Tyrael369 Messages postés 15 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 17 décembre 2003
16 déc. 2003 à 16:48
ok merci
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2003 à 16:46
Il y a d'autres moyens d'interception clavier dont le Filter Driver qui est en mode kernel mais il est question ici de hook global donc DLL.
Tyrael369 Messages postés 15 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 17 décembre 2003
16 déc. 2003 à 16:30
ok merci mais je pensais que l'on pouvait le faire, comme les trojans qui font keyloggers tout ça :-P
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2003 à 16:24
Ce hook se fait pas sans dll, tout hook de portee globale systeme doit se trouver dans une dll qui sera mappee dans chaque processus.
Tyrael369 Messages postés 15 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 17 décembre 2003
16 déc. 2003 à 16:08
J'ai une question , comment le faire sans dll ?
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
13 déc. 2003 à 21:52
Non ya rien à faire, toujours la même erreur.
Bon tant pis :'(
J'ai à peu pres compris le code :)
Merci... Glipper
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 déc. 2003 à 21:47
Alors efface et recommence.
Tu crees un projet win32 APP et VIDE, de suite en mode RELEASE.
Tu copies dans le dossier cree par VS tous les fichiers, cpp, h, lib et rc qu'il y a dans dossier exe du zip. Tu passes dans VS, inserer fichiers existants *.*, et tu les selectionnes tous en 1 seule passe (sauf le lib). Doit compiler.
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
13 déc. 2003 à 21:37
Je n'ai pas touché à la Dll.
C'est lors de la compilation de l'exe.
Glipper
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 déc. 2003 à 21:35
DLL ou exe qui ne compile pas ?
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
13 déc. 2003 à 21:27
Moi je n'arrive pas à compiler, mais je n'ai jamais utilisé de Dll.
Lors de la compilation, il me dit :
"invalid file or disk full: cannot seek to 0x3faebd8c"
Y a t-il quelque chose de special a faire avant de compiler ?
Glipper

ps : j'utilise Visual C++ 5.0
cs_radada Messages postés 488 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 21 avril 2009 1
18 nov. 2003 à 18:14
OK merci bcp : ). Je vais tacher de comprendre comment ça marche demain, parce que là, j'ai une grippe de folie : ((((. Merci encore Brunews ; )
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 nov. 2003 à 18:11
winamp c'est juste le nom de depart pour cause d'exemple demande puis finalement je l'ai pose ici en esperant qu'il serve.
Quand on pose une source c'est justement fait pour que les gens s'en servent en apportant les modifs dont ils ont besoin.
cs_radada Messages postés 488 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 21 avril 2009 1
18 nov. 2003 à 18:05
Euh c normal que c'est un truc winamp?????
cs_radada Messages postés 488 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 21 avril 2009 1
18 nov. 2003 à 17:58
merci brunews, je vais checker ça demain et le modifier un peu (je pense) pour l'adapter à mon cas. Cela ne te dérange pas j'espère???? Merci encore pour tes conseils :)
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
10 nov. 2003 à 08:35
C'est joli!

Juste un truc (pour une fois qu'il y a une critique à faire à BruNews...) tu aurais pu éviter les goto. Quand ça aide à la compréhension du code je n'ai rien contre mais là je trouve que c'est un peu limite, non ?

Sinon sur le reste c'est nickel chrome !
bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004
10 nov. 2003 à 01:01
Un superbe exemple de HOOK. Vraiment ce que j'avais besoin!
Merci BruNews, et bonne continuation.
Rejoignez-nous