有没有办法在dll中捕获键盘事件?
本文关键字:键盘 事件 dll 有没有 | 更新日期: 2023-09-27 17:53:54
我需要在用户按键盘上的某些键时执行特定的代码。
没有什么困难,直到现在,我应该做这个在dll项目类型,类库,不使用任何特定的windows窗体控件。
这可以实现吗?如果有的话,请给我提供一些例子或学习材料。
谢谢。
可以使用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