Trouvé sur le forum anglais...
Code : Tout sélectionner
; ----------------------------------------------------------
; Code de : Luis : Forum Anglais
; A la page : http://www.purebasic.fr/english/viewtopic.php?f=12&t=43397
; ----------------------------------------------------------
; Raw example on how (hopefully) disable the two Windows keys, only when your window is active.
; My keyboard is not infected with the two keys mentioned above,
; so I tried With a on screen virtual keyboard and it seem to work.
;
; Maybe someone is interested in this... so I thought to post it.
; Windows NT 4.0 SP3 or greater
; http://msdn.microsoft.com/en-us/library/ee416808%28VS.85%29.aspx
; ---------------------------------------------------------------
EnableExplicit
Global G_hKeyboardHook
Global G_flgWindowActive
Enumeration
#WIN_MAIN
#EDITOR
EndEnumeration
CompilerIf Defined(KBDLLHOOKSTRUCT, #PB_Structure) = 0
Structure KBDLLHOOKSTRUCT
vkCode.i
scanCode.i
flags.i
time.i
dwExtraInfo.i
EndStructure
CompilerEndIf
Procedure WindowsKeysHook(iCode, wParam, lParam)
Protected *key.KBDLLHOOKSTRUCT = lparam
If (iCode < 0 Or iCode <> #HC_ACTION)
ProcedureReturn CallNextHookEx_(G_hKeyboardHook, iCode, wParam, lParam)
EndIf
If wParam = #WM_KEYDOWN Or wParam = #WM_KEYUP
If *key\vkCode = #VK_LWIN Or *key\vkCode = #VK_RWIN
If G_flgWindowActive
AddGadgetItem(#EDITOR, -1, "Blocking " + Str(*key\vkCode))
ProcedureReturn 1
Else
AddGadgetItem(#EDITOR, -1, "Not blocked because window inactive or minimized.")
EndIf
EndIf
EndIf
ProcedureReturn CallNextHookEx_(G_hKeyboardHook, iCode, wParam, lParam)
EndProcedure
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
If uMsg = #WM_ACTIVATEAPP
If wParam = 1
G_flgWindowActive = 1
Else
G_flgWindowActive = 0
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure Main()
Protected iEvent
If OpenWindow(#WIN_MAIN, 10, 10, 640, 480, "Main Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
G_flgWindowActive = 1
SetWindowCallback(@WinCallBack(), #WIN_MAIN)
G_hKeyboardHook = SetWindowsHookEx_(#WH_KEYBOARD_LL, @WindowsKeysHook(), GetModuleHandle_(#Null), 0)
EditorGadget(#EDITOR, 5,5,630,400)
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
UnhookWindowsHookEx_(G_hKeyboardHook)
EndIf
EndProcedure
Main()
