Tested on Win XP x86,Win 7 x64
Code: Select all
Structure KBDLLHOOKSTRUCT
vkCode.i
scanCode.i
flags.i
time.i
dwExtraInfo.i
EndStructure
Procedure KeyboardHook(iCode, wParam, lParam)
Protected *key.KBDLLHOOKSTRUCT = lparam
If (iCode < 0 Or iCode <> #HC_ACTION)
ProcedureReturn CallNextHookEx_(Hook, iCode, wParam, lParam)
EndIf
If wParam = #WM_KEYDOWN Or wParam = #WM_KEYUP
If *key\vkCode = #VK_LWIN Or *key\vkCode = #VK_RWIN
ProcedureReturn 1
EndIf
EndIf
ProcedureReturn CallNextHookEx_(Hook, iCode, wParam, lParam)
EndProcedure
ExamineDesktops()
OpenWindow(0,0,0,DesktopWidth(0),DesktopHeight(0),"",#PB_Window_BorderLess)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0),0,1,#LWA_ALPHA)
OpenWindow(1,0,0,400,300,"Modal Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(2,10,10, 200,24,"",#ES_CENTER)
ButtonGadget(3,10,270,80,22,"Exit")
Hook = SetWindowsHookEx_(#WH_KEYBOARD_LL, @KeyboardHook(), GetModuleHandle_(#Null), 0)
Repeat
If GetActiveWindow() <> 1
SetActiveWindow(1)
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
UnhookWindowsHookEx_(Hook)
Q = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 2
Case 3
UnhookWindowsHookEx_(Hook)
Q = 1
EndSelect
EndSelect
Until Q =1