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...
Image

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.
Image

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 ? 8O

Moi, ca ne m'est jamais arrivé :!: 8)

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... :mrgreen:

Re: Carte du clavier Azerty #PB_Key_XXXXX

Publié : lun. 21/août/2017 14:29
par SPH
Je ne plaisantais pas :P

Mais, apres reflexion, je me rappelle un probleme de qwerty dans mon jeu de scrabble...

Je ferais des tests et je posterais ici. Merci 8)

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. :wink:

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