detecteur d'appui clavier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

detecteur d'appui clavier

Message 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 :D :D


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
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: detecteur d'appui clavier

Message par falsam »

Tu souhaites détecter la touche Entrée ou Espace depuis n'importe quelle application et le signaler à ta fenêtre ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: detecteur d'appui clavier

Message 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
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: detecteur d'appui clavier

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: detecteur d'appui clavier

Message 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é ;).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: detecteur d'appui clavier

Message par Backup »

...................
Dernière modification par Backup le dim. 20/mars/2011 12:43, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: detecteur d'appui clavier

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: detecteur d'appui clavier

Message 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)
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: detecteur d'appui clavier

Message par Parole De JOJO »

Dobro Merci beaucoup c'est cool ce code :D :D
merci aussi a falsam, ton code m'a servi pour trouver le numero ASCII des touches :idea:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: detecteur d'appui clavier

Message par Ar-S »

Parole De JOJO a écrit :Dobro Merci beaucoup c'est cool ce code :D :D
merci aussi a falsam, ton code m'a servi pour trouver le numero ASCII des touches :idea:
note:
Si tu utilises JaPBe, ALT+A fait apparaitre la table ASCII
tu peux ensuite copier le code hex, le car etc...
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: detecteur d'appui clavier

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: detecteur d'appui clavier

Message par Backup »

ben vire le :roll:
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: detecteur d'appui clavier

Message par Parole De JOJO »

si je le vire il se deregle (il detecte un seul appui comme 2 ou 3)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: detecteur d'appui clavier

Message par Backup »

.................
Dernière modification par Backup le dim. 20/mars/2011 12:44, modifié 1 fois.
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: detecteur d'appui clavier

Message par Parole De JOJO »

Je suis deole dobro mais la je ne t'ais pas suivi
Répondre