C# 中的低级键盘挂钩
我正在制作一个模块,可以通过键盘控制和移动平移和倾斜设备。 该模块是一个 C# .DLL,并使用反射通过其他模块动态加载。 该模块不能有任何形式(可见)。
我正在使用在 http: 上找到的代码: //blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx 用于低级别 kb 挂钩。 唯一的问题是它使用 consol 应用程序并调用 Application.Run() 来处理消息循环,这是挂钩正常工作所必需的。由于我有一个 .dll 而不是控制台应用程序,因此我无法使其工作并捕捉按下的按键。
问题: 如何替换对 Application.Run() 的调用来处理 .dll 中的消息循环以捕获 KB 挂钩?
谢谢!!!!
I'm making a module that will control and move pan and tilt device via KEYBOARD.
The module is a C# .DLL and being loaded dynamiclally via other module using reflection.
The module CAN NOT have any form (visible).
I'm using a code that I found on the http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx for a low level kb hook.
The only problem that is it uses consol application and calls Application.Run() to take care of a message loop, which is required for hooks to work properly. Since I'm having a .dll and not a console application, I can not make it to work and catch the keys pressed.
The question:
How can I replace the call for Application.Run() to take care of a message loop in the .dll to catch the KB hooks?
Thx!!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于消息循环,不需要控制台或 GUI - 它可以保持隐藏状态并拦截消息。
For a message-loop there is no need to have Console or GUI - it can remain hidden, and intercept messages.
您的 DLL 应该使用加载它的程序中的消息循环。但是,如果这是不可能的,您可以让 DLL 启动一个新线程并从该线程内部调用 Application.Run() 并使用它自己的消息循环。
Your DLL should use the message loop from the program loading it. However if that is not possible you can have your DLL start a new thread and call Application.Run() from inside that thread and use it's own message loop.