Skip to content

Commit dbe626d

Browse files
committed
Fix key event return result issue
1 parent ce8b42b commit dbe626d

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,23 @@ namespace Flow.Launcher.Infrastructure.Hotkey
1515
/// </summary>
1616
public unsafe class GlobalHotkey : IDisposable
1717
{
18+
private static readonly HOOKPROC _procKeyboard = HookKeyboardCallback;
1819
private static readonly UnhookWindowsHookExSafeHandle hookId;
1920

20-
public delegate bool KeyboardCallback(int keyEvent, int vkCode, SpecialKeyState state);
21+
public delegate bool KeyboardCallback(KeyEvent keyEvent, int vkCode, SpecialKeyState state);
2122
internal static Func<KeyEvent, int, SpecialKeyState, bool> hookedKeyboardCallback;
2223

2324
static GlobalHotkey()
2425
{
2526
// Set the hook
26-
using Process curProcess = Process.GetCurrentProcess();
27-
using ProcessModule curModule = curProcess.MainModule;
28-
hookId = PInvoke.SetWindowsHookEx(
29-
WINDOWS_HOOK_ID.WH_KEYBOARD_LL,
30-
LowLevelKeyboardProc,
31-
PInvoke.GetModuleHandle(curModule.ModuleName), 0);
27+
hookId = SetHook(_procKeyboard, WINDOWS_HOOK_ID.WH_KEYBOARD_LL);
28+
}
29+
30+
private static UnhookWindowsHookExSafeHandle SetHook(HOOKPROC proc, WINDOWS_HOOK_ID hookId)
31+
{
32+
using var curProcess = Process.GetCurrentProcess();
33+
using var curModule = curProcess.MainModule;
34+
return PInvoke.SetWindowsHookEx(hookId, proc, PInvoke.GetModuleHandle(curModule.ModuleName), 0);
3235
}
3336

3437
public static SpecialKeyState CheckModifiers()
@@ -58,28 +61,28 @@ public static SpecialKeyState CheckModifiers()
5861
return state;
5962
}
6063

61-
private static LRESULT LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
64+
private static LRESULT HookKeyboardCallback(int nCode, WPARAM wParam, LPARAM lParam)
6265
{
6366
bool continues = true;
6467

6568
if (nCode >= 0)
6669
{
67-
var wParamValue = (int)wParam.Value;
68-
if (wParamValue == (int)KeyEvent.WM_KEYDOWN ||
69-
wParamValue == (int)KeyEvent.WM_KEYUP ||
70-
wParamValue == (int)KeyEvent.WM_SYSKEYDOWN ||
71-
wParamValue == (int)KeyEvent.WM_SYSKEYUP)
70+
if (wParam.Value == (int)KeyEvent.WM_KEYDOWN ||
71+
wParam.Value == (int)KeyEvent.WM_KEYUP ||
72+
wParam.Value == (int)KeyEvent.WM_SYSKEYDOWN ||
73+
wParam.Value == (int)KeyEvent.WM_SYSKEYUP)
7274
{
7375
if (hookedKeyboardCallback != null)
74-
continues = hookedKeyboardCallback((KeyEvent)wParamValue, Marshal.ReadInt32(lParam), CheckModifiers());
76+
continues = hookedKeyboardCallback((KeyEvent)wParam.Value, Marshal.ReadInt32(lParam), CheckModifiers());
7577
}
7678
}
7779

7880
if (continues)
7981
{
8082
return PInvoke.CallNextHookEx(hookId, nCode, wParam, lParam);
8183
}
82-
return new LRESULT(-1);
84+
85+
return new LRESULT(1);
8386
}
8487

8588
public void Dispose()

0 commit comments

Comments
 (0)