[Résolu] (MapVirtualKey_() International (AZERTY)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[Résolu] (MapVirtualKey_() International (AZERTY)

Message par falsam »

Bonjour

Ce code renvoie le code ASCII de Q

Code : Tout sélectionner

Debug Chr(MapVirtualKey_(#PB_Key_A, 1))
Comment puis obtenir la bonne valeur ?

Précision : Je ne souhaite pas avoir une solution utilisant la bibliothèque KeyBoard car je ne suis pas dans un contexte 2d ou 3d

Merci d'avance

■ Meilleure solution (Window uniquement)
https://www.purebasic.fr/french/viewtop ... 95#p203295
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: MapVirtualKey_() International (AZERTY)

Message par Ollivier »

Tu peux faire un tableau de traduction avec GetKeyNameText_()

Le 1er param sert d'entrée

*Buffer = AllocateMemory(32)
Param1 = ((Entree & $FF) << 16) | $1000000
Param2 = *Buffer
Param3 = 16

ou bien traduire directement.


Le plus "rapide" c'est plusieurs tableau de 256 cellules :

Tableau1 : résultats temps réels clavier et boutons souris avec bit de bascule (GetAsyncKeyboard() ).
Tableau2 : valeurs équivalentes en local
Tableau3 : horloges individuelles (dans le cas des frappes de texte)
Tableau4 : méthodes/fonctions à appeler si non 0 (programmation des touches)
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: MapVirtualKey_() International (AZERTY)

Message par TazNormand »

Salut Falsounet,

Ton problème vient, je pense, du fait que PB considère le clavier comme étant par défaut en QWERTY. En utilisant MapVirtualKeyEx_() à la place de MapVirtualKey_(), tu peux forcer le code "langage" :

Code : Tout sélectionner

Debug Hex(GetKeyboardLayout_(0),#PB_Word)
kbdLyt=GetKeyboardLayout_(0)
Debug Chr(MapVirtualKey_(#PB_Key_A, 1))
Debug Chr(MapVirtualKeyEx_(#PB_Key_A, 1,kbdLyt))
Debug ""
Debug "QWERTY forcé"
Debug Chr(MapVirtualKeyEx_(#PB_Key_A, 1,$0409))
Debug Chr(MapVirtualKeyEx_(#PB_Key_Z, 1,$0409))
Debug Chr(MapVirtualKeyEx_(#PB_Key_Q, 1,$0409))
Debug Chr(MapVirtualKeyEx_(#PB_Key_S, 1,$0409))
Debug Chr(MapVirtualKeyEx_(#PB_Key_W, 1,$0409))
Debug ""
Debug "AZERTY (par défaut sur mon clavier)"
Debug Chr(MapVirtualKeyEx_(#PB_Key_A, 1, kbdLyt))
Debug Chr(MapVirtualKeyEx_(#PB_Key_Z, 1, kbdLyt))
Debug Chr(MapVirtualKeyEx_(#PB_Key_Q, 1, kbdLyt))
Debug Chr(MapVirtualKeyEx_(#PB_Key_S, 1, kbdLyt))
Debug Chr(MapVirtualKeyEx_(#PB_Key_W, 1, kbdLyt))

Code : Tout sélectionner

40C
Q
Q

QWERTY forcé
A
Z
Q
S
W

AZERTY (par défaut sur mon clavier)
Q
W
A
S
Z
Les codes Layout Clavier de Microsoft son visibles sur ce lien
Image
Image
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: MapVirtualKey_() International (AZERTY)

Message par Micoute »

falsam a écrit :Bonjour

Ce code renvoie le code ASCII de Q

Code : Tout sélectionner

Debug Chr(MapVirtualKey_(#PB_Key_A, 1))
Comment puis obtenir la bonne valeur ?

Précision : Je ne souhaite pas avoir une solution utilisant la bibliothèque KeyBoard

Merci d'avance
il suffit d'utiliser le code ascii renvoyé, c'est à dire pour cette touche

Code : Tout sélectionner

Debug Chr(MapVirtualKey_(#PB_Key_Q, 1))
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: MapVirtualKey_() International (AZERTY)

Message par falsam »

Merci Tazou c'est la meilleure solution pour window.
Ollivier a écrit :Le plus "rapide" c'est plusieurs tableau de 256 cellules
Ollivier merci. Pour une solution multiplate-forme ca serait idéal.

Micoute on est d'accord que tu es hors sujet ^^
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] (MapVirtualKey_() International (AZERTY)

Message par Micoute »

J'ai juste voulu aider.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: MapVirtualKey_() International (AZERTY)

Message par Ollivier »

Falsam a écrit :
Ollivier a écrit :Le plus "rapide" c'est plusieurs tableau de 256 cellules
Ollivier merci. Pour une solution multiplate-forme ca serait idéal.
Je ne sais pas. Une solution qui n'exclut ni une frappe correcte de traitement de texte ni une acquisition directe de touche, oui. Une solution multi-plateforme, c'est moins sûr...
Répondre