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?