Bonjour,
Je créer une classe KeyLoger qui utilise SetWindowsHookEx, celle ci a besoin d'une fonction ou d'une méthode static pour sa callback (2ième arg), voilà ce que ca donne :
je dois utiliser une queue à l'intérieur de cette CallBack, le problème c'est que celle ci doit être déclaré en static également ..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 KeyLoger::KeyLoger() { HHOOK KeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, &KeyLoger::KeyboardEvent, NULL, NULL); HHOOK Mouse = SetWindowsHookEx(WH_MOUSE_LL, &KeyLoger::MouseEvent, NULL, NULL); }
et c'est la que je me prends deux belles erreurs, ce qui est normal puisqu'une méthode statique n'a pas pour but d'accéder aux attribut de la classe, voici les erreurs :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part LNK2001 symbole externe non résolu "private: static class std::queue<struct s_Keys,class std::deque<struct s_Keys,class std::allocator<struct s_Keys> > > KeyLoger::Keys" (?Keys@KeyLoger@@0V?$queue@Us_Keys@@V?$deque@Us_Keys@@V?$allocator@Us_Keys@@@std@@@std@@@std@@A)
voilà ma classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part LNK1120 1 externes non résolus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 typedef struct s_Keys { int Key; bool Ctrl = FALSE; bool Alt = FALSE; bool Shift = FALSE; bool Maj = FALSE; bool Altgr = FALSE; int PosX; int PosY; int timestamp; }t_Keys; class KeyLoger { public: KeyLoger(); ~KeyLoger(); static LRESULT CALLBACK KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK MouseEvent(int nCode, WPARAM wParam, LPARAM lParam); static std::queue<t_Keys> GetKeys(); HHOOK KeyBoard; HHOOK Mouse; private: static std::queue<t_Keys> Keys; static bool KeyIsPut(); };
et voilà comment j'utilise l'une des CallBack :
Vu que je suis obligé d'utiliser mes Callback en statique, comment es ce que je peux accéder à mes attributs sans casse ..?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 LRESULT CALLBACK KeyLoger::KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam) { PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam; std::string str; t_Keys UltiKey; /*...............................................*/ Keys.push(UltiKey); } } return CallNextHookEx(NULL, nCode, wParam, lParam);
Je ne vois plus trop vers quoi chercher ...
dites moi si vous voulait des infos en plus !
Merci pour votre aide
Partager