c#中的低级键盘钩子

本文关键字:键盘 | 更新日期: 2023-09-27 18:03:45

我正在制作一个模块,将通过键盘控制和移动平移和倾斜设备。该模块是一个c# . dll,并使用反射通过其他模块动态加载。模块不能有任何形式(可见)。

我正在使用我在http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx上找到的用于低级kb钩子的代码。唯一的问题是它使用consol application并调用application . run()来处理消息循环,这是钩子正常工作所必需的。因为我有一个。dll而不是控制台应用程序,所以我不能使它工作并捕获按下的键。

问题:我如何替换Application.Run()的调用来处理.dll中的消息循环以捕获KB钩子?

谢谢! !

c#中的低级键盘钩子

对于消息循环,不需要有控制台或GUI -它可以保持隐藏,并拦截消息

您的DLL应该使用来自加载它的程序的消息循环。然而,如果这是不可能的,你可以让你的DLL启动一个新的线程,并从该线程内部调用Application.Run(),并使用它自己的消息循环。

public static void InjectionPoint()
{
    Thread thread = new Thread(new ThreadStart(DLLMessageLoop));
    thread.IsBackground = true;
    thread.Start();
}
public static void DLLMessageLoop()
{
    _hookID = SetHook(_proc);
    Application.Run();
    UnhookWindowsHookEx(_hookID);
}