Ich will jede Taste auf dem Keyboard lesen und den entsprechenden Namen, abhängig von der Systemsprache, per Text ausgeben.
Das funktioniert hiermit ganz gut:
Code: Alles auswählen
OpenWindow(0,0,0,280,150,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0,10,10,100,20,"CHARACTER")
TextGadget(1,10,80,100,20,"VIRTUAL KEY")
TextGadget(2,150,80,100,20,"SCAN CODE")
SetGadgetFont(#PB_Default,LoadFont(0,"Segoe UI",10,#PB_Font_Bold))
TextGadget(3,10,30,260,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)
TextGadget(4,10,100,120,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)
TextGadget(5,150,100,120,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)
SetGadgetColor(3,#PB_Gadget_BackColor,#White)
SetGadgetColor(4,#PB_Gadget_BackColor,#White)
SetGadgetColor(5,#PB_Gadget_BackColor,#White)
Procedure.s GetKeyName(wParam,lParam)
	Protected Buffer$ = Space(256)
	
	GetKeyNameText_(lparam,Buffer$,256)
	SetGadgetText(3,Buffer$)
	SetGadgetText(4,Str(wParam))
	SetGadgetText(5,Str((lParam >> 16) & $FF))	
	
	ProcedureReturn Buffer$
EndProcedure
Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Select uMsg		
		Case #WM_KEYUP ; PRINT KEY
		If wParam = #VK_SNAPSHOT
			GetKeyName(wParam,lParam)
			
			ProcedureReturn 0
		EndIf				
		Case #WM_SYSKEYDOWN ; LEFT ALT / F10
		GetKeyName(wParam,lParam)		
		
		ProcedureReturn 0
 		Case #WM_KEYDOWN
		GetKeyName(wParam,lParam)		
		
		ProcedureReturn 0
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
SetWindowCallback(@WindowCallback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Zwei Fragen diesbezüglich:
1.) Drücke ich die Tasten "/" und "*" auf dem Numpad steht da nur "(ZEHNERTASTATUR)" ohne das Zeichen das die Taste repräsentiert. Drücke ich ENTER steht da "ENTER (ZEHNERTASTATUR)". So sollte es auch für die beiden erwähnten Tasten sein.
Also "/ (ZEHNERTASTATUR)" und "* (ZEHNERTASTATUR)"
2.) Wie kann ich den TAB key auslesen? Drücke ich diese Taste kommen lediglich 3 Nachrichten:
Code: Alles auswählen
; #WM_COMMAND ; 273
; WM_QUERYUISTATE ; 297
; WM_KEYUP ; 257
Kein #WM_KEYDOWN oder #WM_SYSKEYDOWN. Ist das normal?