有没有办法在dll中捕获键盘事件?

发布于 2024-11-04 14:41:55 字数 147 浏览 2 评论 0原文

当用户按下键盘上的某些键时,我需要执行特定的代码。

到目前为止,没什么难的,我应该在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧话新听 2024-11-11 14:41:56

您可以使用GetKeyboardState API函数。

[DllImport ("user32.dll")]
public static extern int GetKeyboardState( byte[] keystate );


private void Form1_KeyDown( object sender, KeyEventArgs e )
{
   byte[] keys = new byte[255];

   GetKeyboardState (keys);

   if( keys[(int)Keys.Up] == 129 && keys[(int)Keys.Right] == 129 )
   {
       Console.WriteLine ("Up Arrow key and Right Arrow key down.");
   }
}

you can use the GetKeyboardState API function.

[DllImport ("user32.dll")]
public static extern int GetKeyboardState( byte[] keystate );


private void Form1_KeyDown( object sender, KeyEventArgs e )
{
   byte[] keys = new byte[255];

   GetKeyboardState (keys);

   if( keys[(int)Keys.Up] == 129 && keys[(int)Keys.Right] == 129 )
   {
       Console.WriteLine ("Up Arrow key and Right Arrow key down.");
   }
}
流星番茄 2024-11-11 14:41:56

您是否正在寻找键盘记录器

Are you looking for a keylogger?

天冷不及心凉 2024-11-11 14:41:56

您可以使用关键 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.

兮子 2024-11-11 14:41:56

不,除非您想从 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.

撕心裂肺的伤痛 2024-11-11 14:41:56

即使使用 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文