Comment stocker une valeur hexa dans une variable

Résolu
rol64 Messages postés 33 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 28 novembre 2011 - 18 juin 2009 à 15:21
rol64 Messages postés 33 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 28 novembre 2011 - 23 juin 2009 à 08:50
Salut,
Langage VB6

Mon problème est le suivant:

Je voudrais stocker des valeurs hexa correspondant aux caractères numériques (0,1,2....9) dans un tableau indexé pour pouvoir les utilisées dans la fonction API keybd_event sous la forme &H30 (valeur hexa correspondant à "0" par exemple).

Le but étant d'établir un tableau à deux dimensions, avec une ligne contenant les caractères de type string ("0","1"...) et une deuxième contenant la valeur hexa associée. Ainsi je voudrais pouvoir analyser une chaine de caractère avec la fonction mid() et simuler des évènements claviers pour retaper la chaine de caractère dans une textebox. C'est un moyen de contourner l'impossibilité à faire un coller par simulation d'un "CTRL+V".
 
Seulement voila, je ne sais pas sous quel format enregistrer mes valeurs hexa dans le tableau.
J'ai essayé ca:

Dim tab(10,10) As Long
 tab(0,0) = &H30 ' correspond à la valeur hexa du caractère '0'
Call keybd_event (Hex(tab(0,0), 0, 0, 0)
Call keybd_event(Hex(tab(0,0), 0, KEYEVENTF_KEYUP,0)

Mais il ne se passe rien à l'exécution (test appliqué au bloc note)

Normalement on déclare en constante en début de programme et on appelle de la manière suivante:
'Declaration en dehors de la procédure
Const VK_0 = &H30

'Simulation clavier dans la procédure
Call keybd_event VK_0 , 0, 0, 0)
Call keybd_event(VK_0 0, KEYEVENTF_KEYUP,0)

Donc que dois je faire pour enregistrer les valeurs des constantes dans un tableau pour que la valeur contenue soit vue par keybd_event comme lorsqu'elle lit une constante contenant une valeur hexa?

Merci de votre aide

5 réponses

Profil bloqué
22 juin 2009 à 21:36
Attention : il ne faut pas confondre le code d'une touche du clavier et le code Ascii que celle-ci renvoie
sur ton clavier tu as bien 2 touches avec le chiffre "0" : elles renvoient toutes les 2 le même code Ascii ( en mettant Shift pour le "0" qui n'est pas dans le pavé numérique) mais les codes touches clavier sont différents : 48 et 96 en décimal ( 96 pour le 0 du pavé numérique et 48 pour l'autre)

Call keybd_event(X,0,0,0) travaille avec les codes des touches et non les codes Ascii : X est le code d'une tpuche clavier et non un code Ascii

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
3
Profil bloqué
18 juin 2009 à 18:13
Regarde la dé laration correcte de l'Api : le caractère doit être de type Byte
Private Declare Sub
keybd_event
Lib
"user32"
Alias
"keybd_event" (
ByVal
bVk
As
Byte,
ByVal
bScan
As
Byte,
ByVal
dwFlags
As Long,


ByVal
dwExtraInfo
As Long)



Prenons le cas du caractère "0" : son code Ascii est 48 en décimal ou &H30 en héxadécimal
Pour simuler la frappe d'un 0 utilise directement asc("0") . Si tu veux simuler le caractère "B" par exemple utilise asc("B")

De plus le fonction Hex transforme une variable numérique en variable chaine héxadéciamale : donc Call keybd_event (Hex(tab(0,0), 0, 0, 0) est incorrect

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
18 juin 2009 à 18:15
Regarde la déclaration correcte de l'Api : le caractère doit être de type Byte : le "c" a sauté à la frappe

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
rol64 Messages postés 33 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 28 novembre 2011
22 juin 2009 à 10:11
Salut Galain,

Tout d'abord, je te remercie pour tes réponses. En fait j'ai essayé avec les valeurs décimal et hexadécimal pour  "0".... Mais c'est bizarre parce que ca m'affiche le caractère "à". J'ai donc pris ma constante VK_0 dans la laquelle est enregistrée la valeur hexadécimale &H30 et je le l'ai lue avec msgbox(VK_0): cela m'affiche la valeur décimale 91!!! Puis j'ai essayé
Call keybd_event(91,0,0,0) et comme par magie ca m'affiche "0"!??? Je pensais pourtant que le code ascii était un code normalisé!!! C'est quand même bizarre!!!
Je pense que cela confirme ta citation:

"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rol64 Messages postés 33 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 28 novembre 2011
23 juin 2009 à 08:50
Ah Ok!!!! Ca explique tout! En effet j'avais même pas fais attention au fait que le"à" se trouve sur la même touche que le "0".... C'est donc le touche clavier!
Encore merci pour ta réponse!!!
Cordialement,
Roland
0
Rejoignez-nous