C#中的低级键盘挂钩

时间:2011-07-28 16:48:24

标签: c# .net keyboard hook

我正在制作一个模块,通过KEYBOARD控制和移动摇摄和倾斜设备。 该模块是C#.DLL,使用反射通过其他模块动态加载。 模块不能有任何形式(可见)。

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

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

THX !!!!

2 个答案:

答案 0 :(得分:0)

您的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);
}

答案 1 :(得分:0)

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