IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Passage en paramètre d'une méthode CALLBACK


Sujet :

Visual C++

  1. #1
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut Passage en paramètre d'une méthode CALLBACK
    Bonjour,

    Je dois écrire un petit Keylogger pour windows . Après quelques tests possitif sans utiliser la POO, j'ai voulu faire les choses au propre et me faire une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Keylogger
    {
    public:
    	Keylogger();
    	~Keylogger();
     
    	LRESULT CALLBACK KeyBoardEvent(int code, WPARAM wParam, LPARAM lParam);
    	LRESULT CALLBACK MouseEvent(int code, WPARAM wParam, LPARAM lParam);
     
    private:
    	bool MajIsPut();
    };
    Comme vous le voyez il y a deux fonctions callback . Leurs adresses sont passés en argument dans la fonction SetWindowsHookEx ():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main()
    {
    	Keylogger loger;
    	
    	HHOOK KeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, &loger.KeyBoardEvent, NULL, NULL);
    	HHOOK Mouse = SetWindowsHookEx(WH_MOUSE_LL, &loger.MouseEvent, NULL, NULL);
    /*....*/
    	UnhookWindowsHookEx(KeyBoard); // decroche l'attache au keyboard
    	UnhookWindowsHookEx(Mouse);
    	return 0;
    }
    Malheureusement, j'obtiens une magnifique erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    error C2276: '&'*: opération non conforme sur l'expression d'une fonction membre liée
    error C2660: 'SetWindowsHookExA'*: la fonction ne prend pas 3 arguments
    error C2276: '&'*: opération non conforme sur l'expression d'une fonction membre liée
    error C2660: 'SetWindowsHookExA'*: la fonction ne prend pas 3 arguments
    Je ne comprends pas d'ou peut provenir le problème, sachant que la même utilisation sans POO marche très bien .
    Sans POO ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            HHOOK KeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, NULL);
    	HHOOK Mouse = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, NULL);
    Doc callback windows : https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
    Doc setWindowsHookEx : https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

    J'ai surement oublié de préciser certaines choses, n'hésitez pas à me le faire remarquer .
    Merci pour votre aide

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Hello.

    Je vois deux soucis :

    Dans ton cas ça devrait ressembler à quelque chose comme SetWindowsHookEx(WH_KEYBOARD_LL, &KeyLogger::KeyBoardEvent, NULL, NULL) et SetWindowsHookEx(WH_MOUSE_LL, &KeyLogger::MouseEvent, NULL, NULL).


    HS: Un bonjour à Kaz
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Ah merci j'ai utilisé la solution de stackOverflow avec les templates, c'est un peu sale mais au moins ça a le mérite de marcher

    par contre ta solution me renvoyer une erreur avant la compilation (les méthodes étaient bien mises en static ) :

    Dans ton cas ça devrait ressembler à quelque chose comme SetWindowsHookEx(WH_KEYBOARD_LL, &KeyLogger::KeyBoardEvent, NULL, NULL) et SetWindowsHookEx(WH_MOUSE_LL, &KeyLogger::MouseEvent, NULL, NULL).
    Je vais essayer de faire un truc un peu plus propre avec ton 2ème lien.

    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/11/2016, 17h01
  2. Réponses: 0
    Dernier message: 02/06/2016, 12h00
  3. Passage de paramètre dans une méthode mis à NULL.
    Par alineas1 dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 20/11/2015, 15h24
  4. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 12h46
  5. Réponses: 2
    Dernier message: 24/11/2004, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo