.
Code: Select all
Structure L4B
StructureUnion
l.l
b.b[4]
EndStructureUnion
EndStructure
Global key$= Space(255)
Global chk_ctrl.l,chk_shft.l,chk_alt.l
Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_CHAR
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_CHAR")
SetGadgetText(5,Str(wParam))
Case #WM_KEYDOWN
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_KEYDOWN")
SetGadgetText(5,Str(wParam))
Select wParam
Case #VK_CONTROL : SetGadgetState(chk_ctrl, #PB_Checkbox_Checked)
Case #VK_SHIFT : SetGadgetState(chk_shft, #PB_Checkbox_Checked)
EndSelect
Case #WM_KEYUP ;hier opslaan van de ingevoerde toetsen
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_KEYUP")
SetGadgetText(5,Str(wParam))
locale = GetKeyboardLayout_(GetCurrentThreadId_())
ctrl$ = Space(100)
GetKeyNameText_(MapVirtualKeyEx_(k\l,1,locale), @ctrl$, 100)
SetWindowTitle(0,ctrl$)
SetGadgetState(chk_ctrl, #PB_Checkbox_Unchecked)
SetGadgetState(chk_shft, #PB_Checkbox_Unchecked)
SetGadgetState(chk_alt , #PB_Checkbox_Unchecked)
Case #WM_DEADCHAR
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_DEADCHAR")
SetGadgetText(5,Str(wParam))
Case #WM_SYSCHAR ;hier opslaan van de ingevoerde toetsen
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_SYSCHAR")
SetGadgetText(5,Str(wParam))
;indien vooraf een WM_SYSKEYDOWN gebruikt werd (bvb. Alt)
SetGadgetState(chk_ctrl, #PB_Checkbox_Unchecked)
SetGadgetState(chk_shft, #PB_Checkbox_Unchecked)
SetGadgetState(chk_alt , #PB_Checkbox_Unchecked)
Case #WM_SYSKEYDOWN
k.L4B : k\l=lParam
SetGadgetText(1, Str(lParam))
SetGadgetText(2, Str(k\b[0])+" "+Str(k\b[1])+" "+Str(k\b[2])+" "+Str(k\b[3]))
GetKeyNameText_(lParam, key$,255)
SetGadgetText(3,key$)
SetGadgetText(4,"WM_SYSKEYDOWN")
SetGadgetText(5,Str(wParam))
Select wParam
Case #VK_CONTROL : SetGadgetState(chk_ctrl, #PB_Checkbox_Checked)
Case #VK_SHIFT : SetGadgetState(chk_shft, #PB_Checkbox_Checked)
Case #VK_MENU : SetGadgetState(chk_alt, #PB_Checkbox_Checked)
EndSelect
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Global Gadget
Procedure GadgetCallback(hWnd, uMsg, wParam, lParam)
WindowCallback(hWnd, uMsg, wParam, lParam)
ProcedureReturn CallWindowProc_(Gadget, hWnd, uMsg, wParam, lParam)
EndProcedure
OpenWindow(0,0,0,720,240,"Hotkey Test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered |#PB_Window_MinimizeGadget)
chk_ctrl = CheckBoxGadget(#PB_Any, 5, 5, 40, 17,"Ctrl")
chk_shft = CheckBoxGadget(#PB_Any, 50, 5, 40, 17,"Shft")
chk_alt = CheckBoxGadget(#PB_Any, 105, 5, 40, 17,"Alt")
TextGadget(1, 100,040,140,20, "")
TextGadget(2, 100,060,140,20, "")
TextGadget(3, 100,080,140,20,"")
TextGadget(4, 100,100,140,20,"")
TextGadget(5, 100,120,140,20,"")
EditorGadget(6, 400, 0, 400, 400)
Gadget = SetWindowLong_(GadgetID(6), #GWL_WNDPROC, @GadgetCallback())
; SetWindowCallback(@WindowCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver