Przeglądaj źródła

Added EnableWindowsKeyLock()

woollybah 7 lat temu
rodzic
commit
6bf230b4fb
1 zmienionych plików z 44 dodań i 1 usunięć
  1. 44 1
      win32.mod/win32.bmx

+ 44 - 1
win32.mod/win32.bmx

@@ -3,12 +3,14 @@ Strict
 
 Module Pub.Win32
 
-ModuleInfo "Version: 1.15"
+ModuleInfo "Version: 1.16"
 ModuleInfo "Author: Mark Sibly, Simon Armstrong"
 ModuleInfo "License: zlib/libpng"
 ModuleInfo "Copyright: Blitz Research Ltd"
 ModuleInfo "ModServer: BRL"
 
+ModuleInfo "History: 1.16"
+ModuleInfo "History: Added EnableWindowsKeyLock()."
 ModuleInfo "History: 1.15 Release"
 ModuleInfo "History: Added more stuff"
 ModuleInfo "History: 1.14 Release"
@@ -44,4 +46,45 @@ Import "com.bmx"
 Import "commdlg.bmx"
 Import "commctrl.bmx"
 Import "richedit.bmx"
+
+Rem
+bbdoc: Locks the left/right Windows keys, preventing them from opening the Windows menu.
+End Rem
+Function EnableWindowsKeyLock( enable:Int, lw:Int = True, rw:Int = True )
+	lwin = lw
+	rwin = rw
+	If enable Then
+		wkhook = SetWindowsHookEx( 13, KeyboardProc, GetModuleHandleA( Null ), 0 )
+	Else
+		UnhookWindowsHookEx( wkhook ) 
+	End If
+End Function 
+
+Private
+
+Global wkhook:Byte Ptr 
+Global lwin:Int, rwin:Int
+
+Extern "win32"
+	Function SetWindowsHookEx:Byte Ptr(idHook:Int, lpfn:Byte Ptr, hMod:Byte Ptr, threadId:Int) = "HHOOK __stdcall SetWindowsHookEx(int, HOOKPROC, HINSTANCE, DWORD)!"
+	Function UnhookWindowsHookEx:Int(hook:Byte Ptr) = "WINBOOL __stdcall UnhookWindowsHookEx(HHOOK)!"
+	Function CallNextHookEx:Byte Ptr( hook:Byte Ptr, code:Int, wp:WParam, lp:LParam) = "LRESULT __stdcall CallNextHookEx(HHOOK, int, WPARAM, LPARAM)!"
+End Extern
+
+Function KeyboardProc:Byte Ptr(code:Int, wp:WParam, lp:LParam) "win32"
+	If code <= 0 Then
+		CallNextHookEx( wkhook, code, wp, lp )
+	End If
+	
+	Local key:Int = Byte Ptr(lp)[0]
+	
+	If wp = WM_KEYDOWN Or wp = WM_KEYUP Then
+		If (lwin And key = 91) Or (rwin And key = 92) Then
+			Return 1
+		End If
+	End If 
+	
+	Return CallNextHookEx(wkhook, code, wp, lp) 
+End Function
+
 ?