begin process at 2012 02 07 10:18:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > HOOK SUR CLAVIER

HOOK SUR CLAVIER


 Information sur la source

Note :
3 / 10 - par 1 personne
3,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :30/12/2003 Vu / téléchargé :8 158 / 1 171

Auteur : hilairenicolas

Ecrire un message privé
Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

 Description

J'avais comme objectif de comprendre comment fonctionnent les hooks, alors j'ai fait cette source ; j'avais pas vraiment de contexte d'application, donc j'ai fait un essai sur le clavier en général. Elle permet d'enregistrer dans un fichier les touches que l'on utilise dans une application.
Ce qu'il y a d'interessant :
- un hook sur le clavier (mon premier :))
- comment utiliser des variables partagées entre les différents threads d'une dll (#pragma data_seg)
- un exemple d'utilisation de CreateFile et de WriteFile
- l'utilisation de GetModuleFileName

Contient :
- la dll qui gere le hook
- un programme de test qui reste en fond pendant 15 secondes pour illustrer le hook


 Conclusion

Je me suis inspiré notamment d'une source de Brunews pour comprendre le hook, donc c'est normal si ca ressemble un peu :)

J'ai vraiment pas poussé la gestion du clavier, 2-3 masques pour illustrer, et puis niveau gestion mémoire, un char [] sur lequel on réécrit au début lorsqu'on va dépasser la taille mémoire max .... mmm .... bof ...
Bref, comprenons bien que le but était d'essayer de faire un hook, et ca a l'air de pas trop mal marcher

Voila,

tous les commentaires sont bienvenus, surtout ceux qui me permettraient de continuer à m'améliorer (astuces, critiques constructives, etc ...)

Nico

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Copie de hookclavier
    •   hookClavier
      •   Release
        • hookClavier.dllTélécharger ce fichier [Réservé aux membres club]49 152 octets
        • hookClavier.libTélécharger ce fichier [Réservé aux membres club]2 290 octets
      • hookClavier.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 362 octets
      • hookClavier.defTélécharger ce fichier [Réservé aux membres club]92 octets
      • hookClavier.dspTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 276 octets
      • hookClavier.dswTélécharger ce fichier [Réservé aux membres club]Voir ce fichier545 octets
      • hookClavier.ncbTélécharger ce fichier [Réservé aux membres club]50 176 octets
      • hookClavier.optTélécharger ce fichier [Réservé aux membres club]55 296 octets
      • hookClavier.plgTélécharger ce fichier [Réservé aux membres club]1 473 octets
    •   testHookClavier

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) LECTEUR RSS (USERCONTROL) (.NET C++/CLI)
Source avec Zip TEMPS D'INACTIVITÉ (HOOK, WIN32)
Source avec Zip DÉTECTER LA FERMETURE DE LA MISE EN VEILLE (HOOK, WIN32)
Source avec Zip ACTIVER COMPLETIONCHAR (COMPLETION AUTOMATIQUE EN CONSOLE DO...
Source avec Zip HOOK SOURIS POUR CODE D'ACCES

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

Commentaires et avis

Commentaire de Kirua le 31/12/2003 01:32:27

http://tcharles.developpez.com/simul/

hooks avec Delphi ou Borland C++ Builder si ça peut aider qq un,

bonne journée ;-)

Commentaire de largoce le 09/01/2004 14:46:41

Bonjour,
J'ai un message d'erreur quand je veux compiler ta source à la ligne:
hookClavier  = SetWindowsHookEx(WH_KEYBOARD, fonctionIntercepteClavier, moduleCourant, 0);

le message d'erreur:
[C++ Avertissement] hookClavier.cpp(9): W8094 Utilisation incorrecte de #pragma comment( <type> [,"string"] )
[C++ Erreur] hookClavier.cpp(101): E2034 Impossible de convertir 'long (__stdcall *)(int,unsigned int,long)' en 'int (__stdcall *)()'
[C++ Erreur] hookClavier.cpp(101): E2342 Mauvaise correspondance de type dans le paramètre 'lpfn' ('int (__stdcall *)()' désiré, 'long (__stdcall *)(int,unsigned int,long)' obtenu)

Bon d'accord, ça fait 3 ;-)
T'inquiète pas, je pense pas que ta source soit en cause.
J'ai C++ Builder 6 version entreprise (trial, télécharger sur le site de Borland) et j'ai toujours des erreurs de ce style à chaque fois que la source requiert une fenêtre et des fois pour autre chose.
Aurais-tu une idée ?
Sinon j'ai remarqué qu'en compilant avec lcc, un fichier .exe faisait 4 ko au lieu de plus de 40 ko compiler avec C++ Builder 6 ?
C'est koi l'arnaque ?
Qu'est-ce qu'il foute dedans pour décupler la taille ?
Merci pour vos aide.

Commentaire de Kirua le 09/01/2004 19:28:54

et en plus l'exe de 40Ko de BCB6 n'est pas autonome ^^ si tu le compile en autonome tu obtiendras minimum 500Ko :-P

Commentaire de hilairenicolas le 09/01/2004 19:59:22

Aucune idée ... peut-etre que le #pragma ne fonctionne pas avec borland, mais ca m'etonnerait pourtant.

Commentaire de Kirua le 09/01/2004 21:18:57

#pragma fonction avec BCB, j'en suis sur à 100%

Commentaire de largoce le 09/01/2004 22:24:02

Ben de toute façon que ça soit avec ce zip ou un autre, j'ai toujours des messages d'erreurs... uniquement quand ça touche Win32 (enfin je crois). Pour les appli sous dos y a pas de problème. Quand je simule un appuie de touche de clavier ça marche.
J'ai la bible de prog de Kris Jamsa, et les exemples fournis sur CD ne marche pas non plus.
J'ai installé Visual studio 6, idem.
Pour le fichier de 40Ko, c'était justement le truc simulant des touches clavier enfoncé. Rien d'extraordinaire.
Et il est autonome je l'ai envoyé à un pote qu'à aucun logiciel de C/C++. Pour simuler un appuie sur 2 touches je pense que c'est carrément trop.
J'ai télécharger un truc (je sais plus lequel) du site, que j'ai pu compilé, et c'est quand j'ai vu la différence de poid avec celui qui été dans le zip que je me suis posé des questions.
Sinon je m'en serais pas aperçu.
J'ai DevC++ mais je crois qu'il me boude. Je compile, quand je veux exécuter il me dit que j'ai pas compiler.
Je sais que ce problème vient de moi, mais je ne sais d'où.
Pour couronner le tout, dans lcc j'ai pas les includes VCL.
Je vais essyer de trouver visual 2003, C mon dernier recours.

Pourtant tout marche bien sur ma bécane, 3DSMAX5, serveur php,...
Mais tout ce qui touche au C++, niet.
Si vous avez des idées n'hésitez pas.
Merci.

Commentaire de vecchio56 le 16/04/2004 18:35:23 administrateur CS

tu as une petite erreur dans hookClavier.cpp:

char finDeLigne[1];
finDeLigne[0]=(char)0x0D;
finDeLigne[1]=(char)0x0A;

il faut évidemment mettre

char finDeLigne[2];
finDeLigne[0]=(char)0x0D;
finDeLigne[1]=(char)0x0A;

Commentaire de hilairenicolas le 19/04/2004 13:48:50

t'es sur de toi vecchio ?
je m'en sers de cette façon :

char finDeLigne[1];
finDeLigne[0]=(char)0x0D;
finDeLigne[1]=(char)0x0A;

WriteFile(fichier,finDeLigne,2,&octetsEcrits,NULL);

et uniquement comme ça
donc, j'écris bien 2 octets
c'est sur que si j'avais mis strlen(finDeLigne) ca aurait jamais marché
mais là, je crois que c'est bon
bien sur, par précaution (et on est pas à 1 octet pret en mémoire), il vaut peut-etre mieux ta solution mais je crois que la mienne fonctionne

A suivre ...

Commentaire de gabuzomeuh le 02/05/2004 23:53:57

salut

pas mal pour la dll mais 2 petits problemes:

1°) pour utiiser la dll correctement il faut l'introduire les fonctions dans une boucle sans fin ce qui fait passer la charge du processeur à 100%

2°) j'arrive à charger la dll dans un autre programme mais la recompiler avec borland c++ 5.02 et la charger ne fonctionne pas

Commentaire de hilairenicolas le 03/05/2004 18:56:49

Salut,
- pourquoi tu parles de boucle sans fin ?

- j'ai pas utilisé borland pour compiler, mais je pense qu'à part refaire un projet et y mettre les sources dedans, ca devrait marcher sans problème

Commentaire de gabuzomeuh le 03/05/2004 23:46:17

salut

- Je parle de boucle sans fin car toi tu utilises GetTickCount pendant 15 secondes mais pour que ca fonctionne en permanence il faut une boucle sans fin ce qui fait passer la charge du processeur à 100% dans le gestionnaire de taches meme pendant les 15 secondes. Moi je voudrais utliser le hook en permanence donc il faut une boucle sans fin qqpart.

- j'arrive à compiler ta dll sous borland 5.02 en enlevant #pragma comment(linker, "/SECTION:.maSection,RWS") mais quand je fais un getprocaddress des fonctions ca retourne 0.

ca m'enerve !  :)


Commentaire de hilairenicolas le 04/05/2004 08:41:08

en fait, le coup du gettickcount, j'ai fait ca parce que j'avais la flemme de faire autre chose pour illustrer le fonctionnement, mais tu peux très bien mettre une appli, une dialog box, ou autre chose, ca ne gene pas

Commentaire de gabuzomeuh le 04/05/2004 22:09:06


salut

J'ai récupéré VC++ 6.0 .

La compilation de ta Dll avec VC++ fonctionne, j'ai plus qu'a modifier le tout et je depose le résultat ici.

Commentaire de vecchio56 le 04/05/2004 23:13:52 administrateur CS

hilairenicolas> char finDeLigne[1]; : tableau de 1 élément, donc finDeLigne[1] n'exite pas
plutot qu'un while, tu devrais utiliser un sleep qui utilise moins (pas) d'UC

Commentaire de gabuzomeuh le 04/05/2004 23:28:42


hilairenicolas>

Bah oui

char findeligne[1] c'est un tableau a une seule case
char findeligne[2] c'est un tableau a 2 cases

la 1ere case du tableau c'est  finDeLigne[0]
le 2eme case du tableau c'est  finDeLigne[1]

donc il faut bien un tableau a 2 cases

Commentaire de mat74 le 26/07/2004 21:31:49

voila j'ai regarder ta source , c'est exactement dont j'avais besoin mais ia un pb je sais pas comment complete le teste pr que sa marche correctement .

@+

Commentaire de hilairenicolas le 26/07/2004 21:52:25

c'est quoi le probleme ? je n'ai pas compris ...

bon, je crois effectivement que je me suis gourré, si tout le monde le dit, c'est que j'ai du mal comprendre ce détail ; et bien, dans ce cas, augmentons la taille du tableau de 1 :)

Commentaire de mat74 le 26/07/2004 23:53:31

ben je sai po qd j'execute le programme teste , rien ne se passe , pendant les 15s qu'il reste actif . il ne devait po enregistrer les touches pressées ds un fichier

Commentaire de hilairenicolas le 27/07/2004 07:17:16

ben si ...
sinon, tu peux aussi faire autre programme qui au début crochete le clavier et le retourne à la normale à la fin, sur le meme schema que mon programme de test

Commentaire de mat74 le 27/07/2004 16:51:13

scuz , en fait je croyais que ton prog ne fonctionnai pas car je n'avai pas de fichier log mais en fait apres avoir regarder le code j'ai vu que tu avais enregistrer le fichier log sur D et vu que mes partition son C,E,F ( ouai je sais po tres logique ms bon ) je ne trouvais pas de fichier log.

Commentaire de mat74 le 27/07/2004 16:51:51

scuz , en fait je croyais que ton prog ne fonctionnai pas car je n'avai pas de fichier log mais en fait apres avoir regarder le code j'ai vu que tu avais enregistrer le fichier log sur D et vu que mes partition son C,E,F ( ouai je sais po tres logique ms bon ) je ne trouvais pas de fichier log.

Commentaire de mat74 le 27/07/2004 16:52:15

scuz , en fait je croyais que ton prog ne fonctionnai pas car je n'avai pas de fichier log mais en fait apres avoir regarder le code j'ai vu que tu avais enregistrer le fichier log sur D et vu que mes partition son C,E,F ( ouai je sais po tres logique ms bon ) je ne trouvais pas de fichier log.

Commentaire de seed le 29/08/2004 22:43:19

Bonjour je viens de regarder ta source et en effet ca marche par contre je suis un peu étonné car je ne vois pas du tout ou tu charges la dll

Aucun fichier ne contient une loadLibrary comme sous BCB

Je me doute que ca doit etre dans les configs de VC++ que je ne maitrise pas du tout mais j'ai beau chercher je ne trouve pas ou tu as préciser de charger la DLL.

Pouriez vous m'éclairer un peu svp Merci

Commentaire de hilairenicolas le 29/08/2004 22:55:37

Bonjour, la dll n'est pas chargée dynamiquement avec loadlibrary, mais statiquement. le fichier de librairie est lié statiquement à l'édition de lien avec le .lib.

Commentaire de seed le 29/08/2004 23:43:30

Merci je vien de mieu comprendre grace à ca :
http://www.cppfrance.com/code.aspx?ID=21438

En faite c'était pas une mauvaise question ;-)

Commentaire de LaPatoshe le 06/01/2005 00:09:23

bon programme pour apprendre, merci

Commentaire de tularis le 25/03/2007 18:03:40

bon bah,
c'est ce que je pensais, c'est une site d'amateur ...
Aucun filtrage des source, aucune exigence.
Encore une grosse deception, non respect des normes,
code non commenter, ...
Je retourne sur developez.com et sur la msdn, ici je perd mon temps.

Peut etre que quand j'aurai le temps, je devrai faire un site comme celui ci mais avec de la qualité ...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales