Page 1 sur 1
Carte du clavier Azerty #PB_Key_XXXXX
Publié : dim. 20/août/2017 19:23
par Fig
J'ai toujours des problèmes pour trouver mes touches à cause de la référence au clavier Qwerty et à l'anglicisme.
Peut être que c'est la même chose pour vous donc cette petite carte du clavier pourrait vous être utile...
La touche <> peut être testé avec le code 86, je n'ai pas trouvé le #PB_key_ correspondant. Idem pour les touches windows et Menu (respectivement 219 et 221).
Les touches M et ,? sont buguées pour keyboardpushed() mais pas pour keyboardreleased().
Djes signale que ,? peut être testé avec la valeur 1216.

Re: Carte du clavier Azerty KeyboardPushed()
Publié : dim. 20/août/2017 22:13
par SPH
Tu veux dire que ca t'arrive quand tu tapes du texte dans l'IDE ?
Moi, ca ne m'est jamais arrivé

Re: Carte du clavier Azerty KeyboardPushed()
Publié : dim. 20/août/2017 22:45
par falsam
SPH a écrit :Tu veux dire que ca t'arrive quand tu tapes du texte dans l'IDE ?
Fig est dans le contexte application 2D
Voir sujet
http://www.purebasic.fr/french/viewtopi ... 29#p194629
Re: Carte du clavier Azerty KeyboardPushed()
Publié : lun. 21/août/2017 10:55
par Fig
Après une bonne dizaine de secondes à y réfléchir, j'ai préféré penser que SPH plaisantait...

Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : lun. 21/août/2017 14:29
par SPH
Je ne plaisantais pas
Mais, apres reflexion, je me rappelle un probleme de qwerty dans mon jeu de scrabble...
Je ferais des tests et je posterais ici. Merci

Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : lun. 21/août/2017 14:33
par falsam
KeyboardInkey() est peut être la solution à ce souci.

Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : dim. 03/sept./2017 17:40
par Ollivier
Je n'arrive pas à retrouver le code ASCII de l'espèce de mine, symbole qu'on n'utilise jamais, qui se génère en tapant Alt+£ (ou Alt+$ c'est pareil).
Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : dim. 03/sept./2017 18:41
par Fig
chr(164) ? ¤
Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : dim. 03/sept./2017 22:12
par Ollivier
Effectivement, après quelques réglages, je n'ai plus le 'ñ' de "El Niño". (C'est un ordinateur espagnol)
Normalement, c'est là qu'aurait dû atterrir le symbole de la monnaie européenne, mais le balayage clavier suit une histoire technique particulière.
Cette fameuse touche qui contient les monnaies anglaise et américaine suit une logique spécifique quand elle est alliée à une touche Alt. La même logique que la touche "2" (symbole "au carré"), la touche "BackSpace", la touche "Entrée" et les 3 touches "*", "-" et "+" du pavé numérique : son code clavier prend une valeur générique non nulle (240) et le code de touche n'est extractible qu'à partir du code géographique, tandis que la plupart des touches qui permettent de s'allier à une touche "Alt" renvoient une valeur nulle en tant que code clavier. Alors, pourquoi? J'en sais rien...
Tu n'as pas eu de soucis avec la touche "/" du pavé numérique qui prend le même code géographique que la touche PadEnter?
Je viens de bien me prendre le chou avec à passer en AZERTY...
Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : lun. 04/sept./2017 6:54
par djes
On ne les génère pas avec ALT mais avec ALT-GR (à droite de la barre espace), ce qui équivaut à un CTRL+ALT. Pour le ñ, il suffit de faire ALT-GR+2, et d'appuyer ensuite sur le n.
Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : lun. 04/sept./2017 10:10
par Zorro
l'une des meilleurs façons de recuperer les touches de notre calvier
c'est d'utiliser les ScanCodes + l'etat des touches Speciales (Alt,Ctrl,Shift )
voici un code de BasicallyPure qui fonctionne bien :
Code : Tout sélectionner
; Exemple hameçonnage clavier
; écran et ExamineKeyboard () n'est pas nécessaire
; un événement personnalisé est généré lorsqu'une touche est enfoncée
; code de touche virtuelle peut être obtenue avec états Maj, Ctrl et Alt
; par BasicallyPure
; date: 10/13/2014
; OS: windows
; compiler: PB 5.30
; forum topic: http://www.purebasic.fr/english/viewtopic.php?f=12&t=60775
EnableExplicit
Define vKeyCode, scanCode, shiftState, altKeyState, ctrlKeyState, Quit = #False
Define hHookProc ; <--- doit avoir cette procédure pour hameçonnage
#KeyBoard_Event = #PB_Event_FirstCustomValue ; l'hameçonnage génère cet événement sur toute touche pressée
#WinMain = 1
; voici la procédure de rappel de l'hameçonnage
Procedure MyKeyboardHook(nCode, wParam, lParam)
; détache un événement personnalisé (#KeyBoard_Event) quand une touche du clavier est pressée
; informations sur la touche pressée peut être obtenue avec ce qui suit:
; EventData() retourne WPARAM (le code de touche virtuelle).
; EventType() retourne #True si la touche Maj est en pressée lorsque la touche est enfoncée.
; EventGadget() retourne lParam (nombre de répétitions (bits 0-15), le code de balayage (bits 16-23),
; drapeau touche prolongé (24 bits), bits réservés (25-28), le code de contexte (bit 29),
; drapeau touche d'état précédent (bit 30), et le drapeau état-transition (bit 31).
; voir windows 'KeyboardProc callback function' pour plud de détails.
; http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v=vs.85).aspx
Shared hHookProc
Static shift, ctrl, alt
Protected vShift, vlParam
If Not (nCode < 0)
If Not lParam & $80000000 ; key down
If wParam = #VK_CONTROL : ctrl + 1 : EndIf
If wParam = #VK_SHIFT : shift + 1 : EndIf
If wParam = #VK_MENU : alt + 1 : EndIf
Select wParam
Case #VK_A To #VK_Z
vShift = Bool(shift > 0) ! (GetKeyState_(#VK_CAPITAL) & 1)
Default
vShift = Bool(shift > 0)
EndSelect
; utilise le bit 25 de vlParam pour l'état touche "CTRL"
vlParam = (lParam & $FDFFFFFF) | (Bool(ctrl > 0) << 25)
Select wParam
Case #VK_SHIFT
If shift < 2 ; éviter la répétition automatique avec shift
PostEvent(#KeyBoard_Event, #WinMain, vlParam, vShift, wParam)
EndIf
Case #VK_CONTROL
If ctrl < 2 ; éviter la répétition automatique avec ctrl
PostEvent(#KeyBoard_Event, #WinMain, vlParam, vShift, wParam)
EndIf
Case #VK_MENU
If alt < 2 ; éviter la répétition automatique avec alt
PostEvent(#KeyBoard_Event, #WinMain, vlParam, vShift, wParam)
EndIf
Default
PostEvent(#KeyBoard_Event, #WinMain, vlParam, vShift, wParam)
EndSelect
Else ; touche Haut
Select wParam
Case #VK_SHIFT : shift = 0
Case #VK_CONTROL : ctrl = 0
Case #VK_MENU : alt = 0
EndSelect
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hHookProc, nCode, wParam, lParam)
EndProcedure
If OpenWindow(#WinMain, 0, 0, 400, 200, "hameçonnage clavier", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
; créer l'hameçonnage
hHookProc = SetWindowsHookEx_(#WH_KEYBOARD, @MyKeyboardHook(), #Null, GetCurrentThreadId_())
StringGadget(0, 10, 10, 100, 25, "")
StringGadget(1, 10, 45, 100, 25, "")
SpinGadget(2, 10, 90, 100, 25, 0, 100, #PB_Spin_Numeric)
ButtonGadget(3, 150, 10, 50, 25, "vider")
EditorGadget(4, 210, 10, 150, 150)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = #True
Case #PB_Event_Gadget
Select EventGadget()
Case 0 :
Case 1 :
Case 2 :
Case 3 : SetGadgetText(4, "") : SetActiveGadget(4)
Case 4 :
EndSelect
Case #KeyBoard_Event ; à cet événement personnalisé
; EventData() donne le code de touche virtuelle
; EventGadget() Bits 16-23 donne le code de balayage
; EventType() donne l'état de la touche shift
; EventGadget() bit 29 donne l'état de la touche alt
; EventGadget() bit 25 donne l'état de la touche ctrl
vKeyCode = EventData() ; obtenir code vKey
scanCode = (EventGadget() & $FF0000) >> 16 ; obtenir code de balayage
shiftState = EventType() ; obtenir état shift
altKeyState = (EventGadget() & $20000000) >> 29 ; obtenir état alt
ctrlKeyState = (EventGadget() & $2000000) >> 25 ; obtenir état ctrl
Debug "virtual key code = " + vKeyCode +
" | scan code = " + scanCode +
" | shift = " + shiftState +
" | Alt = " + altKeyState +
" | ctrl = " + ctrlKeyState
; effectuer une action si touche "Entrée" a été enfoncée alors
; que le gadget de votre choix avait le focus
If vKeyCode = #VK_RETURN
Select GetActiveGadget()
Case 0 : SetActiveGadget(1)
Case 1 : SetActiveGadget(0)
Case 2 : SetGadgetText(2, Str(GetGadgetState(2))) ; spin gadget
EndSelect
EndIf
EndSelect
Until Quit = #True
; supprimer l'hameçonnage
UnhookWindowsHookEx_(hHookProc)
EndIf
; Epb
Re: Carte du clavier Azerty #PB_Key_XXXXX
Publié : lun. 04/sept./2017 11:11
par djes
Très bon code, merci Zorro