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钩子?
谢谢! !
对于消息循环,不需要有控制台或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);
}