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

时间:2011-04-28 20:16:55

标签: c# events dll

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

直到现在没什么难的,我应该在dll项目类型,类库中执行此操作,并且不要使用任何特定的Windows窗体控件。

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

感谢。

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您在寻找keylogger吗?

答案 2 :(得分:0)

您可以使用键hooks来获取全局键盘输入。由于在C#中执行此操作将要求您无论如何都要从本机API进行P / Invoke几乎所有功能,您也可以在C / C ++中编写DLL并删除.NET依赖项。

答案 3 :(得分:0)

除非您想要从Windows窗体控件(System.Windows.Forms.Control)捕获关键事件,否则无法使用托管代码库实现此目的。否则,您必须导入本机代码才能处理键盘事件挂钩。

答案 4 :(得分:0)

即使使用P / Invoke在C#中编写全局钩子,也没有办法,只能使用低级别的键盘和鼠标钩子。所以你可能P / Invoke整个钩子,或者只是一个自编的C ++ DLL,但无论如何它有很多工作。
我会想方设法用热键做你想做的事情,所以你不需要钩子。

祝你好运,Alex