KEY INFOS (GETKEYSTATE / GETASYNCKEYSTATE) : UTILE POUR DÉVELOPPER DES APPS NÉCÉ
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
26 avril 2006 à 14:16
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006
-
27 avril 2006 à 12:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006 27 avril 2006 à 12:17
yes merci gobillot our ton lanternage ;-) ca m'a bien éclairé
vais regarder ce que je peux faire avec les fonctions de l'API que tu m'as donné, ca devrait etre interressant...
Quand a renfield, idem merci pour ta source, ca peut servir ;)
Bon, vais bosser sur mon arme ultime de développement d'app. clavier et je mettrais a jour ;-)
merci a tous,
pekch
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 avril 2006 à 08:00
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 26 avril 2006 à 18:27
Description GetKeyState:
La fonction GetKeyState retourne le status de la touche virtuelle (virtual-key code) spécifiée. Autrement dit, cette fonction permet de savoir si une touche est enfoncée (toutes les touches du clavier et les boutons de la souris).
La fonction retourne 0 ou 1 lorsque la touche est inactive sinon -128 ou -127 lorsque la touche est enfoncée.
Description GetAsyncKeyState:
Cette fonction permet de connaitre l'état appuyé ou relâché des touches, même si l'application n'est pas active.
donc pour tester une touche:
< 0 --> touche enfonçée
>=0 --> touche au repos
16 --> "Q'
17 --> "W"
je parlais des codes que l'on devrait obtenir directement à partir du port clavier ...!!!
ça se complique:
voilà d'autres fonctions intéressantes, qui sont en rapport avec les Scan Codes, mais j'ai pas trouvé beaucoup de documentation sur elles.
Private Declare Function OemKeyScan Lib "user32" (ByVal wOemChar As Integer) As Long
Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006 26 avril 2006 à 15:32
yes ok, merci pour l'info
et pour mon -32767 de getasynckeystate, c'est bien pour l'antirebond?
parceque sinon, la valeur est -32768, bref des qu'on est sous 0 c'est que la touche est pressée
apres, pour getkeystate, les valeurs que j'ai constaté sont -128 et -127. C'est le même principe?
connaitrais tu les différentes valeurs possibles en retour de ces fonctions et leur significations?
parce que pour numlock par exemple, d'apres ce que j'ai compris :
-127/-128 -> on est en train d'actionner la touche
>0 -> la touche est au repos et inactive
0 -> la touche est au repos et active
ce serait bien quelque chose comme ca?
bon, je sais, faudrait que je lise la doc de microsoft :) désolé
etquand tu dis
"16 correspond à "Q" et 17 à "W" pour le système"
tu parles des valeurs en sortie directe du clavier?
il faudrait aussi que je me documente sur les protocoles des claviers :)
Merci encore
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 26 avril 2006 à 15:09
effectivement la touche ENTER n'a qu'un seul code,
je sais pas pourquoi, donc impossible de distinguer l'une de l'autre.
pour la touche Ctrl, on utilise 16 si on veut pas distinguer la droite de la gauche, sinon on utilise 162 ou 163
GetAsyncKeyState est surtout utilisé pour les jeux où il faut de la rapidité, réponse directe du clavier. sinon la touche reste dans le buffer virtuel tant qu'on ne l'a pas enlevée.
pour les ScanCodes, je suis pas sur que ce soit les mêmes,
ceux du système, de windows ou de vb ???
puisque 16 correspond à "Q" et 17 à "W" pour le système,
à vérifier ...
pour l'état des touches, ça dépend des touches:
If GetKeyState(VK_INSERT) = 1 Then
Text1 = "Touche INSERT activée"
Else
Text1 = "Touche INSERT non activée"
End If
If GetKeyState(VK_NUMLOCK) = 0 Then
Text1 = "Touche NUMLOCK activée"
Else
Text1 = "Touche NUMLOCK non activée"
End If
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006 26 avril 2006 à 14:41
oui, c'est bien les mêmes pour tout le monde (sauf ALTGR...), mais pour shift gauche par ex : pourquoi 16 et 160? 16 ou 160 n'aurait il pas suffit? parce que pour enter, c'est 13 dans les deux cas, on ne peut pas identifier si la touche pressée est ou non celle du numpad...
alors quelle est la différence concrete entre les deux scancodes? et est-ce les scancodes qu'envoie le clavier par le port ps2 tels quel, ou ont il déjà ete convertit en un autre format par windows
Et concretement, quand utiliser getkeystate ou getasynckeystate?
et pour finir, comment récupérer l'etat des touches LOCK (nom pas si pressée ou non, mais si activées ou non...)
Merci ;)
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 26 avril 2006 à 14:16
il me semblait que les ScanCodes étaient le mêmes pour tout le monde:
27 avril 2006 à 12:17
vais regarder ce que je peux faire avec les fonctions de l'API que tu m'as donné, ca devrait etre interressant...
Quand a renfield, idem merci pour ta source, ca peut servir ;)
Bon, vais bosser sur mon arme ultime de développement d'app. clavier et je mettrais a jour ;-)
merci a tous,
pekch
27 avril 2006 à 08:00
http://www.vbfrance.com/codes/KEYCODE-ASCII_33577.aspx
26 avril 2006 à 18:27
La fonction GetKeyState retourne le status de la touche virtuelle (virtual-key code) spécifiée. Autrement dit, cette fonction permet de savoir si une touche est enfoncée (toutes les touches du clavier et les boutons de la souris).
La fonction retourne 0 ou 1 lorsque la touche est inactive sinon -128 ou -127 lorsque la touche est enfoncée.
Description GetAsyncKeyState:
Cette fonction permet de connaitre l'état appuyé ou relâché des touches, même si l'application n'est pas active.
donc pour tester une touche:
< 0 --> touche enfonçée
>=0 --> touche au repos
16 --> "Q'
17 --> "W"
je parlais des codes que l'on devrait obtenir directement à partir du port clavier ...!!!
ça se complique:
voilà d'autres fonctions intéressantes, qui sont en rapport avec les Scan Codes, mais j'ai pas trouvé beaucoup de documentation sur elles.
Private Declare Function OemKeyScan Lib "user32" (ByVal wOemChar As Integer) As Long
Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
26 avril 2006 à 15:32
et pour mon -32767 de getasynckeystate, c'est bien pour l'antirebond?
parceque sinon, la valeur est -32768, bref des qu'on est sous 0 c'est que la touche est pressée
apres, pour getkeystate, les valeurs que j'ai constaté sont -128 et -127. C'est le même principe?
connaitrais tu les différentes valeurs possibles en retour de ces fonctions et leur significations?
parce que pour numlock par exemple, d'apres ce que j'ai compris :
-127/-128 -> on est en train d'actionner la touche
>0 -> la touche est au repos et inactive
0 -> la touche est au repos et active
ce serait bien quelque chose comme ca?
bon, je sais, faudrait que je lise la doc de microsoft :) désolé
etquand tu dis
"16 correspond à "Q" et 17 à "W" pour le système"
tu parles des valeurs en sortie directe du clavier?
il faudrait aussi que je me documente sur les protocoles des claviers :)
Merci encore
26 avril 2006 à 15:09
je sais pas pourquoi, donc impossible de distinguer l'une de l'autre.
pour la touche Ctrl, on utilise 16 si on veut pas distinguer la droite de la gauche, sinon on utilise 162 ou 163
GetAsyncKeyState est surtout utilisé pour les jeux où il faut de la rapidité, réponse directe du clavier. sinon la touche reste dans le buffer virtuel tant qu'on ne l'a pas enlevée.
pour les ScanCodes, je suis pas sur que ce soit les mêmes,
ceux du système, de windows ou de vb ???
puisque 16 correspond à "Q" et 17 à "W" pour le système,
à vérifier ...
pour l'état des touches, ça dépend des touches:
If GetKeyState(VK_INSERT) = 1 Then
Text1 = "Touche INSERT activée"
Else
Text1 = "Touche INSERT non activée"
End If
If GetKeyState(VK_NUMLOCK) = 0 Then
Text1 = "Touche NUMLOCK activée"
Else
Text1 = "Touche NUMLOCK non activée"
End If
26 avril 2006 à 14:41
alors quelle est la différence concrete entre les deux scancodes? et est-ce les scancodes qu'envoie le clavier par le port ps2 tels quel, ou ont il déjà ete convertit en un autre format par windows
Et concretement, quand utiliser getkeystate ou getasynckeystate?
et pour finir, comment récupérer l'etat des touches LOCK (nom pas si pressée ou non, mais si activées ou non...)
Merci ;)
26 avril 2006 à 14:16
Ctrl Gauche: 17, 162
Ctrl Droit: 17, 163
Alt: 18, 164
Alt Gr: 17, 18, 165
Shift Gauche: 16, 160
Shift Droit: 16, 161
CAPSLOCK: 20
NUMLOCK: 144
INS: 45
SCROLLLOCK: 145
GetAsyncKeyState renvoie l'état des touches physiques du clavier,
sans passer par le buffer interne