KEY INFOS (GETKEYSTATE / GETASYNCKEYSTATE) : UTILE POUR DÉVELOPPER DES APPS NÉCÉ

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 26 avril 2006 à 14:16
pekch Messages postés 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/37256-key-infos-getkeystate-getasynckeystate-utile-pour-developper-des-apps-necessitant-la-gestion-de-la-frappe-clavier

pekch Messages postés 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2006 à 08:00
une source qui pourrais t'intéresser :

http://www.vbfrance.com/codes/KEYCODE-ASCII_33577.aspx
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
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és 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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és 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
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és 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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és 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
26 avril 2006 à 14:16
il me semblait que les ScanCodes étaient le mêmes pour tout le monde:

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
Rejoignez-nous