44namespace ComputerLock . Platforms ;
55internal class SystemKeyHook : IDisposable
66{
7- // ReSharper disable InconsistentNaming
8- private const int WH_KEYBOARD_LL = 13 ;
9- private const int WM_KEYDOWN = 0x0100 ;
10- private const int WM_SYSKEYDOWN = 0x0104 ;
11-
12- private const int VK_LWIN = 0x5B ;
13- private const int VK_RWIN = 0x5C ;
14- private const int VK_LSHIFT = 0xA0 ;
15- private const int VK_RSHIFT = 0xA1 ;
16- private const int VK_LCONTROL = 0xA2 ;
17- private const int VK_RCONTROL = 0xA3 ;
18- //ALT
19- private const int VK_LMENU = 0xA4 ;
20- private const int VK_RMENU = 0xA5 ;
21- private const int VK_TAB = 0x09 ;
22- // ReSharper restore InconsistentNaming
23-
247 private int _hookId ;
25- private readonly HookDelegate _hookCallback ;
8+ private readonly WinApi . HookDelegate _hookCallback ;
269 private Hotkey ? _ignoreHotkey ; // 使用单个Hotkey变量来存储需要忽略的快捷键
2710
28- public delegate int HookDelegate ( int nCode , int wParam , IntPtr lParam ) ;
29-
30- [ DllImport ( "user32.dll" ) ]
31- public static extern int SetWindowsHookEx ( int idHook , HookDelegate callback , IntPtr hInstance , uint threadId ) ;
32-
33- [ DllImport ( "user32.dll" ) ]
34- public static extern int UnhookWindowsHookEx ( int idHook ) ;
35-
36- [ DllImport ( "user32.dll" ) ]
37- public static extern int CallNextHookEx ( int idHook , int nCode , int wParam , IntPtr lParam ) ;
38-
39- [ DllImport ( "kernel32.dll" ) ]
40- public static extern IntPtr GetModuleHandle ( string lpModuleName ) ;
41-
42-
4311 public SystemKeyHook ( )
4412 {
4513 _hookCallback = KeyboardHookCallback ;
@@ -53,7 +21,7 @@ public void DisableSystemKey()
5321 {
5422 return ;
5523 }
56- _hookId = SetWindowsHookEx ( WH_KEYBOARD_LL , _hookCallback , GetModuleHandle ( moduleName ) , 0 ) ;
24+ _hookId = WinApi . SetWindowsHookEx ( WinApi . WH_KEYBOARD_LL , _hookCallback , WinApi . GetModuleHandle ( moduleName ) , 0 ) ;
5725 }
5826
5927 public void SetIgnoreHotkey ( Hotkey hotKey )
@@ -68,11 +36,11 @@ private int KeyboardHookCallback(int nCode, int wParam, IntPtr lParam)
6836
6937 if ( _ignoreHotkey == null )
7038 {
71- if ( IsSystemKey ( vkCode ) && ( wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN ) )
39+ if ( IsSystemKey ( vkCode ) && ( wParam == WinApi . WM_KEYDOWN || wParam == WinApi . WM_SYSKEYDOWN ) )
7240 {
7341 return 1 ; // 阻止事件传递
7442 }
75- return CallNextHookEx ( _hookId , nCode , wParam , lParam ) ; // 其他按键放行
43+ return WinApi . CallNextHookEx ( _hookId , nCode , wParam , lParam ) ; // 其他按键放行
7644 }
7745
7846 if ( ! IsPartOfIgnoreHotkey ( vkCode ) )
@@ -86,35 +54,35 @@ private int KeyboardHookCallback(int nCode, int wParam, IntPtr lParam)
8654 return 1 ; // 阻止事件传递
8755 }
8856 }
89- return CallNextHookEx ( _hookId , nCode , wParam , lParam ) ; // 放行
57+ return WinApi . CallNextHookEx ( _hookId , nCode , wParam , lParam ) ; // 放行
9058 }
91- return CallNextHookEx ( _hookId , nCode , wParam , lParam ) ;
59+ return WinApi . CallNextHookEx ( _hookId , nCode , wParam , lParam ) ;
9260 }
9361
9462 private bool IsSystemKey ( int vkCode )
9563 {
96- return vkCode == VK_LWIN || vkCode == VK_RWIN ||
97- vkCode == VK_LSHIFT || vkCode == VK_RSHIFT ||
98- vkCode == VK_LCONTROL || vkCode == VK_RCONTROL ||
99- vkCode == VK_TAB ;
64+ return vkCode == WinApi . VK_LWIN || vkCode == WinApi . VK_RWIN ||
65+ vkCode == WinApi . VK_LSHIFT || vkCode == WinApi . VK_RSHIFT ||
66+ vkCode == WinApi . VK_LCONTROL || vkCode == WinApi . VK_RCONTROL ||
67+ vkCode == WinApi . VK_TAB ;
10068 }
10169
10270 private bool IsPartOfIgnoreHotkey ( int vkCode )
10371 {
10472 bool isPartOfIgnoreHotkey = false ;
10573 if ( _ignoreHotkey ! . Modifiers . HasFlag ( HotkeyModifiers . Control ) )
10674 {
107- isPartOfIgnoreHotkey |= ( vkCode == VK_LCONTROL || vkCode == VK_RCONTROL ) ;
75+ isPartOfIgnoreHotkey |= ( vkCode == WinApi . VK_LCONTROL || vkCode == WinApi . VK_RCONTROL ) ;
10876 }
10977
11078 if ( _ignoreHotkey . Modifiers . HasFlag ( HotkeyModifiers . Shift ) )
11179 {
112- isPartOfIgnoreHotkey |= ( vkCode == VK_LSHIFT || vkCode == VK_RSHIFT ) ;
80+ isPartOfIgnoreHotkey |= ( vkCode == WinApi . VK_LSHIFT || vkCode == WinApi . VK_RSHIFT ) ;
11381 }
11482
11583 if ( _ignoreHotkey . Modifiers . HasFlag ( HotkeyModifiers . Alt ) )
11684 {
117- isPartOfIgnoreHotkey |= ( vkCode == VK_LMENU || vkCode == VK_RMENU ) ;
85+ isPartOfIgnoreHotkey |= ( vkCode == WinApi . VK_LMENU || vkCode == WinApi . VK_RMENU ) ;
11886 }
11987
12088 isPartOfIgnoreHotkey |= ( vkCode == ( int ) _ignoreHotkey . Key ) ;
@@ -123,22 +91,22 @@ private bool IsPartOfIgnoreHotkey(int vkCode)
12391
12492 private bool IsModifierKey ( int vkCode )
12593 {
126- return vkCode == VK_LCONTROL || vkCode == VK_RCONTROL ||
127- vkCode == VK_LSHIFT || vkCode == VK_RSHIFT ||
128- vkCode == VK_LMENU || vkCode == VK_RMENU ;
94+ return vkCode == WinApi . VK_LCONTROL || vkCode == WinApi . VK_RCONTROL ||
95+ vkCode == WinApi . VK_LSHIFT || vkCode == WinApi . VK_RSHIFT ||
96+ vkCode == WinApi . VK_LMENU || vkCode == WinApi . VK_RMENU ;
12997 }
13098
13199 private bool IsModifierRequired ( int vkCode )
132100 {
133- if ( vkCode == VK_LCONTROL || vkCode == VK_RCONTROL )
101+ if ( vkCode == WinApi . VK_LCONTROL || vkCode == WinApi . VK_RCONTROL )
134102 {
135103 return _ignoreHotkey ! . Modifiers . HasFlag ( HotkeyModifiers . Control ) ;
136104 }
137- if ( vkCode == VK_LSHIFT || vkCode == VK_RSHIFT )
105+ if ( vkCode == WinApi . VK_LSHIFT || vkCode == WinApi . VK_RSHIFT )
138106 {
139107 return _ignoreHotkey ! . Modifiers . HasFlag ( HotkeyModifiers . Shift ) ;
140108 }
141- if ( vkCode == VK_LMENU || vkCode == VK_RMENU )
109+ if ( vkCode == WinApi . VK_LMENU || vkCode == WinApi . VK_RMENU )
142110 {
143111 return _ignoreHotkey ! . Modifiers . HasFlag ( HotkeyModifiers . Alt ) ;
144112 }
@@ -148,6 +116,6 @@ private bool IsModifierRequired(int vkCode)
148116 public void Dispose ( )
149117 {
150118 _ignoreHotkey = null ;
151- UnhookWindowsHookEx ( _hookId ) ;
119+ WinApi . UnhookWindowsHookEx ( _hookId ) ;
152120 }
153121}
0 commit comments