在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);
}
}问题是它在按键一段时间后停止工作。什么都没有出现错误,我只是暂时没有得到任何输出。当它停止工作时我找不到坚固的图案。
再现这个问题很简单,就像一个疯子一样打了一些钥匙,通常在窗外。
我怀疑背后有一些邪恶的线程问题,任何人都知道如何保持这种工作?
白衣非少年
相关分类