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

本文关键字:键盘 事件 dll 有没有 | 更新日期: 2023-09-27 17:53:54

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

没有什么困难,直到现在,我应该做这个在dll项目类型,类库,不使用任何特定的windows窗体控件。

这可以实现吗?如果有的话,请给我提供一些例子或学习材料。

谢谢。

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

可以使用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.");
   }
}

你在找键盘记录器吗?

您可以使用键挂钩来获得全局键盘输入。因为在c#中做它将要求你P/调用几乎所有来自本机API的功能,你不妨用C/c++编写DLL并删除对。net的依赖。

不,除非你想从Windows窗体控件(System.Windows.Forms.Control)捕获关键事件,否则你不能用托管代码库完成这一点。否则,您将不得不导入本地代码来处理键盘事件钩子。

即使使用p/Invoke,也无法在c#中编写全局钩子,只能编写低级的键盘和鼠标钩子。所以你可能可以P/Invoke整个钩子,或者只调用一个自己编写的c++ DLL,但无论如何,这都是很多工作。
我会寻找一种方法来做你想要的热键,所以你不需要一个钩子。

祝你好运,Alex