Page 1 sur 3
detecteur d'appui clavier
Publié : lun. 28/févr./2011 0:08
par Parole De JOJO
J'ai essaye de faire un petit code qui detecte les appuis se entree et espace et affiche le nombre d'appuis dans une petite fenetre
le probleme est que ca ne detecte que les appuis qui sont fait lorsque la fenetre cree a le focus, mais si une autre fenetre l'a, ca ne capte pas
un petit conseil?
merci
Code : Tout sélectionner
Enumeration
#Window_0
#Text_Enter
#Text_Space
#Text_Mail
#String_Enter
#String_Space
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0, 60, 126, 59, "ENTER",#PB_Window_Tool |#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
TextGadget(#Text_Enter, 80, 0, 30, 15, "ENTER")
TextGadget(#Text_Space, 80, 25, 30, 15, "SPACE")
TextGadget(#Text_Mail, 10, 40, 110, 20, "*******@gmail.com")
StringGadget(#String_Enter, 10, 0, 35, 15, "", #PB_String_ReadOnly | #PB_String_BorderLess)
StringGadget(#String_Space, 10, 25, 35, 15, "", #PB_String_ReadOnly | #PB_String_BorderLess)
EndIf
EndIf
EndProcedure
InitKeyboard()
InitSprite()
Open_Window_0()
OpenWindowedScreen(WindowID(#Window_0), 0, 0, 1, 1, 1, 0, 0)
StickyWindow(#Window_0,1)
Repeat
Event=WaitWindowEvent()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Return)
k+1
Debug "Return = "+Str(k)
EndIf
If KeyboardPushed(#PB_Key_Space)
l+1
Debug "Space = "+Str(l)
EndIf
Until Event = #PB_Event_CloseWindow
End
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 0:33
par falsam
Tu souhaites détecter la touche Entrée ou Espace depuis n'importe quelle application et le signaler à ta fenêtre ?
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 5:50
par Parole De JOJO
humm je pense qu oui
en fait pas seullement d'une application, meme si aucune fenetre est ouverte et le gars s'amuse a taper entrer ou espace
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 8:54
par falsam
En bref un keylogger :p
Tu va devoir passer par un Hook (Crochet ou Hameçon en anglais)
Windows génère un événement pour chaque action sur le matériel. Chaque fois qu'un utilisateur appuie sur une touche du clavier ou déplace la souris. Le système d'exploitation insère ces événements dans une file d'attente. Un hook est un moyen d'intercepter ces évènements de Windows.
les différentes API mises en oeuvre dans le cadre de la création d'un Hook.
SetWindowsHookEx :Cette API permet la mise en place d'un hook.
CallNextHookEx : Cette API permet de passer les informations du message en cours de traitement à la procédure suivante.
UnhookWindowsHookEx : Cette API permet de libérer le Hook.
lParam contient un pointeur vers la structure
KBDLLHOOKSTRUCT
Code : Tout sélectionner
Structure KBDLLHOOKSTRUCT
vkCode.i
scanCode.i
flags.i
Time.i
dwExtraInfo.i
EndStructure
;Procédure qui devra être appelée lorsque circulera un message de type "Clavier"
Procedure HookActionCallBack(nCode, wParam, lParam)
*keyBoard.KBDLLHOOKSTRUCT=lParam
Dim keyState.c (255)
GetKeyboardState_(@KeyState())
Debug *Keyboard\vkCode
ProcedureReturn CallNextHookEx_(HookHandle, nCode, wParam, lParam)
EndProcedure
HookHandle=SetWindowsHookEx_(#WH_KEYBOARD_LL, @HookActionCallBack(), 0, 0)
OpenWindow(1, 10, 10, 10, 10, "", #PB_Window_SystemMenu)
StickyWindow(1, 1)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
;On libére le Hook à l'aide de la fonction UnHookWindowsHookEx
UnhookWindowsHookEx_(HookHandle)
On constate que, lorsque j’appuie sur la touche ‘a’, mon keylogger me l’affiche 2 fois car le hook intercepte la touche enfoncée et la touche relevée.
Le code corrigé.
Code : Tout sélectionner
Structure KBDLLHOOKSTRUCT
vkCode.i
scanCode.i
flags.i
Time.i
dwExtraInfo.i
EndStructure
;Procédure qui devra être appelée lorsque circulera un message de type "Clavier"
Procedure HookActionCallBack(nCode, wParam, lParam)
Protected *keyBoard.KBDLLHOOKSTRUCT=lParam
Dim keyState.c (255)
If (nCode=#HC_ACTION) And (wParam = #WM_KEYDOWN)
GetKeyboardState_(@KeyState())
Debug *Keyboard\vkCode
EndIf
ProcedureReturn CallNextHookEx_(HookHandle, nCode, wParam, lParam)
EndProcedure
HookHandle=SetWindowsHookEx_(#WH_KEYBOARD_LL, @HookActionCallBack(), 0, 0)
OpenWindow(1, 10, 10, 10, 10, "", #PB_Window_SystemMenu)
StickyWindow(1, 1)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
;On libére le Hook à l'aide de la fonction UnHookWindowsHookEx
UnhookWindowsHookEx_(HookHandle)
Il n'est pas encore parfait, mais il répond largement à ta demande.
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 9:36
par blendman
Si je peux me permettre, ce serait intéressant de donner le code pour un brouilleur de capture de touches de clavier aussi, ça permettrait d'avoir un outil pour contrer ce genre de chose quand ce n'est pas souhaité

.
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 10:14
par Backup
...................
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 10:22
par falsam
ha mince !!! Je pensais que ça ne fonctionnait pas si la fenêtre n'avait plus le focus. Merci Dobro.
Dobro a écrit :(au passage le code ci dessus , ne marche pas chez moi)]
Quel version de windows as tu ?
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 11:13
par Backup
falsam a écrit :Dobro a écrit :(au passage le code ci dessus , ne marche pas chez moi)]
Quel version de windows as tu ?
XP SP3 +(pcTools +Antivir)
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 12:43
par Parole De JOJO
Dobro Merci beaucoup c'est cool ce code
merci aussi a falsam, ton code m'a servi pour trouver le numero ASCII des touches

Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 12:50
par Ar-S
Parole De JOJO a écrit :Dobro Merci beaucoup c'est cool ce code
merci aussi a falsam, ton code m'a servi pour trouver le numero ASCII des touches

note:
Si tu utilises JaPBe, ALT+A fait apparaitre la table ASCII
tu peux ensuite copier le code hex, le car etc...
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 13:02
par Parole De JOJO
En fait ourquoi le delay a la fin? il fait bugger la fenetre (elle met du temps a afficher les chiffres)
je l'ai diminue mais la les infos se faussent (il detecte un seul apui comme deux ou trois)
Code : Tout sélectionner
Enumeration
#Window_0
#Text_Enter
#Text_Space
#Text_Mail
#String_Enter
#String_Space
EndEnumeration
If OpenWindow(#Window_0, 0, 60, 126, 59, "Entrex",#PB_Window_Tool |#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
TextGadget(#Text_Enter, 10, 0, 30, 15, "Enter")
TextGadget(#Text_Space, 10, 25, 30, 15, "Space")
TextGadget(#Text_Mail, 10, 40, 110, 20, "******@gmail.com")
StringGadget(#String_Enter, 65, 0, 50, 15, "0", #PB_String_ReadOnly)
StringGadget(#String_Space, 65, 25, 45, 15, "0", #PB_String_ReadOnly)
EndIf
StickyWindow(#Window_0,1)
Repeat
Event = WaitWindowEvent (10)
Select EventWindow ()
Case #Window_0
GetCursorPos_ (Pos.POINT)
If GetAsyncKeyState_ (13)
k+1:SetGadgetText(#String_Enter,Str(k)):Beep_ (440,100)
ElseIf GetAsyncKeyState_ (32)
l+1:SetGadgetText(#String_Space,Str(l)):Beep_ (540,100)
EndIf
Delay (80)
EndSelect
Until Event = #PB_Event_CloseWindow
End
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 14:13
par Backup
ben vire le

Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 14:19
par Parole De JOJO
si je le vire il se deregle (il detecte un seul appui comme 2 ou 3)
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 15:04
par Backup
.................
Re: detecteur d'appui clavier
Publié : lun. 28/févr./2011 15:18
par Parole De JOJO
Je suis deole dobro mais la je ne t'ais pas suivi