在WPF / C#中使用全局键盘钩子(WH_KEYBOARD_LL)
我从我在互联网上发现的代码中找到了自己的WH_KEYBOARD_LL
帮助类:
将以下代码放到一些utils库中,让它成为YourUtils.cs:
using System;using System.Diagnostics;using System.Runtime.InteropServices;using System.Runtime.CompilerServices;using System.Windows.Input;namespace MYCOMPANYHERE.WPF.KeyboardHelper{ public class KeyboardListener : IDisposable { private static IntPtr hookId = IntPtr.Zero; [MethodImpl(MethodImplOptions.NoInlining)] private IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) { try { return HookCallbackInner(nCode, wParam, lParam); } catch { Console.WriteLine("There was some error somewhere..."); } return InterceptKeys.CallNextHookEx(hookId, nCode, wParam, lParam); } private IntPtr HookCallbackInner(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { if (wParam == (IntPtr)InterceptKeys.WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); if (KeyDown != null) KeyDown(this, new RawKeyEventArgs(vkCode, false)); } else if (wParam == (IntPtr)InterceptKeys.WM_KEYUP) { int vkCode = Marshal.ReadInt32(lParam); if (KeyUp != null) KeyUp(this, new RawKeyEventArgs(vkCode, false)); } } return InterceptKeys.CallNextHookEx(hookId, nCode, wParam, lParam); } }
问题是它在按键一段时间后停止工作。什么都没有出现错误,我只是暂时没有得到任何输出。当它停止工作时我找不到坚固的图案。
再现这个问题很简单,就像一个疯子一样打了一些钥匙,通常在窗外。
我怀疑背后有一些邪恶的线程问题,任何人都知道如何保持这种工作?
白衣非少年
相关分类