code ASCII et clavier numerique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jnoel345
Messages : 13
Inscription : ven. 09/juin/2006 11:28

code ASCII et clavier numerique

Message par jnoel345 »

Bonjour,
je suis en train d'etudier les Hooks clavier et voici ma question :
Comment se fait il que les codes ascci de mon clavier numerique ( à droite ) ne correspondent pas aux codes ASCII standart .
Par exemple quand je tape les chiffres de 0 à 9 , mon programme me retourne les valeurs suivantes :
96 ,97 ,98 ,99 ,100,101,102,103,104,105 alors que les codes ASCII correspondants devraient être :
48,49,50,51,52,53,54,55,56,57 .

Je n'ai pas ce probleme avec les touches alphabetiques qui correspondent aux codes ASCII .
Quand aux touches numeriques du haut du clavier , les codes ASCII sont conformes egalement .

Quelqu'un pourrait m'eclairer sur ce point ?
Merci pour vos conseils .
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Cela vient peut être de ton programme, t'as un code à proposer?
jnoel345
Messages : 13
Inscription : ven. 09/juin/2006 11:28

Message par jnoel345 »

Oui , en voici le code , il est encore à l'etat d'etude .

Code : Tout sélectionner


;..................................HOOK PROGRAMME ...........................................




#PIPE_ACCES_DUPLEX=3 

Global listwins,Buffer_Ecriture.s,Buffer_Lecture.s,Caract$,init,hhook,L,espace$,TEMP,info$,listwins,x,yFFF,I,T$,H$,fConnected
Buffer_Ecriture=Space(3) 
Buffer_Lecture=Space(3)
 
init=1 
L=0
mot$=" "
lettre$=" "
x=0
y=0





 

Procedure Thread_Client(pipe.l)

Hfile.l= OpenFile(0,"fichier.txt") 

                                    
Repeat

x=0

  fConnected = ConnectNamedPipe_(pipe, #NULL) 
  
  
  
  If fConnected 
       
   
       ReadFile_(pipe, @Buffer_Lecture, Len(Buffer_Lecture), @recu, 0) 
  
       
       A= PeekW(@recu)
       A$=( Str(A))
       L=0
       
         If A<>0

         FileSeek(Lof())
         L=Len(Buffer_Lecture)
         Position = Loc() ;RENVOI LA POSITION DU POINTEUR DANS LE FICHIER
  
         
  
         EndIf 
         
              
              Debug Buffer_Lecture
              Debug Len(Buffer_Lecture)
              WriteString((Buffer_Lecture)+",")  
              ;If Right(Buffer_Lecture,1)=" "
              ;WriteString((Buffer_Lecture)+",") ;ON ECRIT DANS LE FICHIER...
              ;Debug Buffer_Lecture           
              ;Buffer_Lecture="   "
              
             ; Else
              ;WriteString((Buffer_Lecture)+",") ;ON ECRIT DANS LE FICHIER...
              ;Debug Buffer_Lecture
              ;Buffer_Lecture="   "
 
              ;EndIf
              Delay(50)
              
  
  EndIf
  
  
  
 
  If init 
     Buffer_Ecriture=Str(hhook) 
     WriteFile_(pipe,@Buffer_Ecriture,Len(Buffer_Ecriture), @envoye, 0) 
     FlushFileBuffers_(pipe) 
     init=0 
  EndIf  
  
  
  
  
  DisconnectNamedPipe_(pipe) 
  
ForEver 


EndProcedure 








lib.s="C:\WINDOWS\hook.dll" 
hmodule=LoadLibrary_(@lib) 
proc.s="hook" 
adresse=GetProcAddress_(hmodule,@proc) 


If OpenWindow(0,0,0,600,200,#PB_Window_SystemMenu|#PB_Window_Invisible ,"Test hook") And CreateGadgetList(WindowID(0)) 

    Hpipe=CreateNamedPipe_("\\.\pipe\hookpipe", #PIPE_ACCES_DUPLEX, #PIPE_TYPE_MESSAGE | #PIPE_READMODE_MESSAGE, 1, 100, 100, 3000, 0) 
    hhook=SetWindowsHookEx_(#WH_KEYBOARD,adresse,hmodule,0) 
    Thread=CreateThread(@Thread_Client(),Hpipe)
    
    
    

    Repeat 
          
          Event= WaitWindowEvent()
              
          
          
         
    
    ForEver
EndIf 
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ah le code de Hardy!

En fait je viens juste de trouver la réponse, les touches de code virtuel du clavier sont définies par des constantes VK_XXX, donc c'est tout à fait normal.
jnoel345
Messages : 13
Inscription : ven. 09/juin/2006 11:28

Message par jnoel345 »

Oui j'essaye de comprendre le fonctionnement du code de hardy .
Merci pour ton infos , je vais approfondir mes recherche à partir de ça .
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Si ça peut aider
#VK_PGUP = 19
#VK_PGDN = 34
VK_LBUTTON=$01
VK_RBUTTON=$02
VK_CANCEL=$03
VK_MBUTTON=$04
VK_XBUTTON1=$05
VK_XBUTTON2=$06
VK_BACK=$08
VK_TAB=$09
VK_CLEAR=$0C
VK_RETURN=$0D
VK_SHIFT=$10
VK_CONTROL=$11
VK_MENU=$12
VK_PAUSE=$13
VK_CAPITAL=$14
VK_KANA=$15
VK_HANGUL=$15
VK_JUNJA=$17
VK_FINAL=$18
VK_HANJA=$19
VK_KANJI=$19
VK_ESCAPE=$1B
VK_CONVERT=$1C
VK_NONCONVERT=$1D
VK_ACCEPT=$1E
VK_MODECHANGE=$1F
VK_SPACE=$20
VK_PRIOR=$21
VK_NEXT=$22
VK_END=$23
VK_HOME=$24
VK_LEFT=$25
VK_UP=$26
VK_RIGHT=$27
VK_DOWN=$28
VK_SELECT=$29
VK_PRINT=$2A
VK_EXECUTE=$2B
VK_SNAPSHOT=$2C
VK_INSERT=$2D
VK_DELETE=$2E
VK_HELP=$2F
VK_0=$30
VK_1=$31
VK_2=$32
VK_3=$33
VK_4=$34
VK_5=$35
VK_6=$36
VK_7=$37
VK_8=$38
VK_9=$39
VK_A=$41
VK_B=$42
VK_C=$43
VK_D=$44
VK_E=$45
VK_F=$46
VK_G=$47
VK_H=$48
VK_I=$49
VK_J=$4A
VK_K=$4B
VK_L=$4C
VK_M=$4D
VK_N=$4E
VK_O=$4F
VK_P=$50
VK_Q=$51
VK_R=$52
VK_S=$53
VK_T=$54
VK_U=$55
VK_V=$56
VK_W=$57
VK_X=$58
VK_Y=$59
VK_Z=$5A
VK_LWIN=$5B
VK_RWIN=$5C
VK_APPS=$5D
VK_SLEEP=$5F
VK_NUMPAD0=$60
VK_NUMPAD1=$61
VK_NUMPAD2=$62
VK_NUMPAD3=$63
VK_NUMPAD4=$64
VK_NUMPAD5=$65
VK_NUMPAD6=$66
VK_NUMPAD7=$67
VK_NUMPAD8=$68
VK_NUMPAD9=$69
VK_MULTIPLY=$6A
VK_ADD=$6B
VK_SEPARATOR=$6C
VK_SUBTRACT=$6D
VK_DECIMAL=$6E
VK_DIVIDE=$6F
VK_F1=$70
VK_F2=$71
VK_F3=$72
VK_F4=$73
VK_F5=$74
VK_F6=$75
VK_F7=$76
VK_F8=$77
VK_F9=$78
VK_F10=$79
VK_F11=$7A
VK_F12=$7B
VK_F13=$7C
VK_F14=$7D
VK_F15=$7E
VK_F16=$7F
VK_F17=$80
VK_F18=$81
VK_F19=$82
VK_F20=$83
VK_F21=$84
VK_F22=$85
VK_F23=$86
VK_F24=$87
VK_NUMLOCK=$90
VK_SCROLL=$91
VK_LSHIFT=$A0
VK_RSHIFT=$A1
VK_LCONTROL=$A2
VK_RCONTROL=$A3
VK_LMENU=$A4
VK_RMENU=$A5
VK_BROWSER_BACK=$A6
VK_BROWSER_FORWARD=$A7
VK_BROWSER_REFRESH=$A8
VK_BROWSER_STOP=$A9
VK_BROWSER_SEARCH=$AA
VK_BROWSER_FAVORITES=$AB
VK_BROWSER_HOME=$AC
VK_VOLUME_MUTE=$AD
VK_VOLUME_DOWN=$AE
VK_VOLUME_UP=$AF
VK_MEDIA_NEXT_TRACK=$B0
VK_MEDIA_PREV_TRACK=$B1
VK_MEDIA_STOP=$B2
VK_MEDIA_PLAY_PAUSE=$B3
VK_LAUNCH_MAIL=$B4
VK_LAUNCH_MEDIA_SELECT=$B5
VK_LAUNCH_APP1=$B6
VK_LAUNCH_APP2=$B7
VK_OEM_1=$BA
VK_OEM_PLUS=$BB
VK_OEM_COMMA=$BC
VK_OEM_MINUS=$BD
VK_OEM_PERIOD=$BE
VK_OEM_2=$BF
VK_OEM_3=$C0
VK_OEM_4=$DB
VK_OEM_5=$DC
VK_OEM_6=$DD
VK_OEM_7=$DE
VK_OEM_8=$DF
VK_OEM_102=$E2
VK_PROCESSKEY=$E5
VK_PACKET=$E7
VK_ATTN=$F6
VK_CRSEL=$F7
VK_EXSEL=$F8
VK_EREOF=$F9
VK_PLAY=$FA
VK_ZOOM=$FB
VK_PA1=$FD
VK_OEM_CLEAR=$FE
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

comme ça c'est mieux :D


#VK_PGUP = 19
#VK_PGDN = 34
#VK_LBUTTON =$01
#VK_RBUTTON =$02
#VK_CANCEL =$03
#VK_MBUTTON =$04
#VK_XBUTTON1 =$05
#VK_XBUTTON2 =$06
#VK_BACK =$08
#VK_TAB =$09
#VK_CLEAR =$0C
#VK_RETURN =$0D
#VK_SHIFT =$10
#VK_CONTROL =$11
#VK_MENU =$12
#VK_PAUSE =$13
#VK_CAPITAL =$14
#VK_KANA =$15
#VK_HANGUL =$15
#VK_JUNJA =$17
#VK_FINAL =$18
#VK_HANJA =$19
#VK_KANJI =$19
#VK_ESCAPE =$1B
#VK_CONVERT =$1C
#VK_NONCONVERT =$1D
#VK_ACCEPT =$1E
#VK_MODECHANGE =$1F
#VK_SPACE =$20
#VK_PRIOR =$21
#VK_NEXT =$22
#VK_END =$23
#VK_HOME =$24
#VK_LEFT =$25
#VK_UP =$26
#VK_RIGHT =$27
#VK_DOWN =$28
#VK_SELECT =$29
#VK_PRINT =$2A
#VK_EXECUTE =$2B
#VK_SNAPSHOT =$2C
#VK_INSERT =$2D
#VK_DELETE =$2E
#VK_HELP =$2F
#VK_0 =$30
#VK_1 =$31
#VK_2 =$32
#VK_3 =$33
#VK_4 =$34
#VK_5 =$35
#VK_6 =$36
#VK_7 =$37
#VK_8 =$38
#VK_9 =$39
#VK_A =$41
#VK_B =$42
#VK_C =$43
#VK_D =$44
#VK_E =$45
#VK_F =$46
#VK_G =$47
#VK_H =$48
#VK_I =$49
#VK_J =$4A
#VK_K =$4B
#VK_L =$4C
#VK_M =$4D
#VK_N =$4E
#VK_O =$4F
#VK_P =$50
#VK_Q =$51
#VK_R =$52
#VK_S =$53
#VK_T =$54
#VK_U =$55
#VK_V =$56
#VK_W =$57
#VK_X =$58
#VK_Y =$59
#VK_Z =$5A
#VK_LWIN =$5B
#VK_RWIN =$5C
#VK_APPS =$5D
#VK_SLEEP =$5F
#VK_NUMPAD0 =$60
#VK_NUMPAD1 =$61
#VK_NUMPAD2 =$62
#VK_NUMPAD3 =$63
#VK_NUMPAD4 =$64
#VK_NUMPAD5 =$65
#VK_NUMPAD6 =$66
#VK_NUMPAD7 =$67
#VK_NUMPAD8 =$68
#VK_NUMPAD9 =$69
#VK_MULTIPLY =$6A
#VK_ADD =$6B
#VK_SEPARATOR =$6C
#VK_SUBTRACT =$6D
#VK_DECIMAL =$6E
#VK_DIVIDE =$6F
#VK_F1 =$70
#VK_F2 =$71
#VK_F3 =$72
#VK_F4 =$73
#VK_F5 =$74
#VK_F6 =$75
#VK_F7 =$76
#VK_F8 =$77
#VK_F9 =$78
#VK_F10 =$79
#VK_F11 =$7A
#VK_F12 =$7B
#VK_F13 =$7C
#VK_F14 =$7D
#VK_F15 =$7E
#VK_F16 =$7F
#VK_F17 =$80
#VK_F18 =$81
#VK_F19 =$82
#VK_F20 =$83
#VK_F21 =$84
#VK_F22 =$85
#VK_F23 =$86
#VK_F24 =$87
#VK_NUMLOCK =$90
#VK_SCROLL =$91
#VK_LSHIFT =$A0
#VK_RSHIFT =$A1
#VK_LCONTROL =$A2
#VK_RCONTROL =$A3
#VK_LMENU =$A4
#VK_RMENU =$A5
#VK_BROWSER_BACK =$A6
#VK_BROWSER_FORWARD =$A7
#VK_BROWSER_REFRESH =$A8
#VK_BROWSER_STOP =$A9
#VK_BROWSER_SEARCH =$AA
#VK_BROWSER_FAVORITES =$AB
#VK_BROWSER_HOME =$AC
#VK_VOLUME_MUTE =$AD
#VK_VOLUME_DOWN =$AE
#VK_VOLUME_UP =$AF
#VK_MEDIA_NEXT_TRACK =$B0
#VK_MEDIA_PREV_TRACK =$B1
#VK_MEDIA_STOP =$B2
#VK_MEDIA_PLAY_PAUSE =$B3
#VK_LAUNCH_MAIL =$B4
#VK_LAUNCH_MEDIA_SELECT =$B5
#VK_LAUNCH_APP1 =$B6
#VK_LAUNCH_APP2 =$B7
#VK_OEM_1 =$BA
#VK_OEM_PLUS =$BB
#VK_OEM_COMMA =$BC
#VK_OEM_MINUS =$BD
#VK_OEM_PERIOD =$BE
#VK_OEM_2 =$BF
#VK_OEM_3 =$C0
#VK_OEM_4 =$DB
#VK_OEM_5 =$DC
#VK_OEM_6 =$DD
#VK_OEM_7 =$DE
#VK_OEM_8 =$DF
#VK_OEM_102 =$E2
#VK_PROCESSKEY =$E5
#VK_PACKET =$E7
#VK_ATTN =$F6
#VK_CRSEL =$F7
#VK_EXSEL =$F8
#VK_EREOF =$F9
#VK_PLAY =$FA
#VK_ZOOM =$FB
#VK_PA1 =$FD
#VK_OEM_CLEAR =$FE
jnoel345
Messages : 13
Inscription : ven. 09/juin/2006 11:28

Message par jnoel345 »

Merci , une question : Ces constantes VK s'utilisent uniquement avec GetAsyncKeyState ?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Dobro et son clorisateur... :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

@lionel_om

il a surtout rajouté les # :)

@jnoel345

en fait, il y a bcp de cas où cà peut être utile.

avec les messages #WM_KEYDOWN, #WM_KEYUP dans les callbacks
avec les fonctions SendInput_(), ToAscii_(), ToUnicode_(), VkKeyScan_(), keybd_event_(), ...
Image
Répondre