Carte du clavier Azerty #PB_Key_XXXXX

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Carte du clavier Azerty #PB_Key_XXXXX

Message 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
Dernière modification par Fig le lun. 21/août/2017 16:05, modifié 5 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Carte du clavier Azerty KeyboardPushed()

Message 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)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Carte du clavier Azerty KeyboardPushed()

Message 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
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
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Carte du clavier Azerty KeyboardPushed()

Message par Fig »

Après une bonne dizaine de secondes à y réfléchir, j'ai préféré penser que SPH plaisantait... :mrgreen:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message 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)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message par falsam »

KeyboardInkey() est peut être la solution à ce souci. :wink:
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: Carte du clavier Azerty #PB_Key_XXXXX

Message 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).
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message par Fig »

chr(164) ? ¤
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message 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...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message 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.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message 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

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Carte du clavier Azerty #PB_Key_XXXXX

Message par djes »

Très bon code, merci Zorro
Répondre