有没有办法在dll中捕获键盘事件?
当用户按下键盘上的某些键时,我需要执行特定的代码。
到目前为止,没什么难的,我应该在 dll 项目类型、类库中执行此操作,并且不使用任何特定的 Windows 窗体控件。
这能实现吗? ,如果是的话请给我一些例子或学习材料。
谢谢。
I need to execute a specific code when user presses some keys from keyboard.
Nothing hard until now, i should do this in a dll project type, class library, and do not use any specific windows forms controls.
Could this be achieved ? , if so please provide me some some examples or learning materials.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用
GetKeyboardState
API函数。you can use the
GetKeyboardState
API function.您是否正在寻找键盘记录器?
Are you looking for a keylogger?
您可以使用关键 hooks 来获取全局键盘输入。由于使用 C# 执行此操作将要求您从本机 API 中 P/Invoke 几乎所有功能,因此您不妨使用 C/C++ 编写 DLL 并删除 .NET 依赖项。
You can use key hooks to get global keyboard input. Since doing it in C# will require you to P/Invoke almost all the functionality from the native API anyways, you might as well write the DLL in C/C++ and remove the .NET dependency.
不,除非您想从 Windows 窗体控件 (
System.Windows.Forms.Control
) 捕获关键事件,否则您无法使用托管代码库来完成此操作。否则,您将必须导入本机代码来处理键盘事件挂钩。No you cannot accomplish this with managed code libraries unless you want to capture key events from Windows Form Controls (
System.Windows.Forms.Control
). Otherwise you will have to import native code to handle keyboard event hooks.即使使用 P/Invoke 在 C# 中编写全局钩子也是没有办法的,只有低级的键盘和鼠标钩子。因此,您可能可以 P/Invoke 整个钩子,也可以仅 P/Invoke 自己编写的 C++ DLL,但无论如何,这都需要大量工作。
我会寻找一种方法来使用热键做你想做的事情,这样你就不需要钩子了。
祝你好运,亚历克斯
There is no way, even with P/Invoke to write a global hook in C#, only low-level keyboard and mouse hooks. So you could probably P/Invoke either the whole hook, or only a self-written C++ DLL, but in any case its a lot of work.
I would look for a way to do what you want with Hotkeys, so you don't need a hook.
Good luck, Alex