Comment stocker une valeur hexa dans une variable [Résolu]

Messages postés
33
Date d'inscription
lundi 21 janvier 2008
Dernière intervention
28 novembre 2011
- - Dernière réponse : rol64
Messages postés
33
Date d'inscription
lundi 21 janvier 2008
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
3
Merci
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

Merci cs_Galain 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
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
Commenter la réponse de cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
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
Commenter la réponse de cs_Galain
Messages postés
33
Date d'inscription
lundi 21 janvier 2008
Dernière intervention
28 novembre 2011
0
Merci
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."
Commenter la réponse de rol64
Messages postés
33
Date d'inscription
lundi 21 janvier 2008
Dernière intervention
28 novembre 2011
0
Merci
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
Commenter la réponse de rol64

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.