C# 是否有方法捕获dll中的键盘事件?
当用户按下键盘上的一些键时,我需要执行一个特定的代码 到目前为止没有什么困难,我应该在dll项目类型、类库中执行此操作,并且不使用任何特定的windows窗体控件 这能实现吗,如果是,请给我一些例子或学习材料C# 是否有方法捕获dll中的键盘事件?,c#,events,dll,C#,Events,Dll,当用户按下键盘上的一些键时,我需要执行一个特定的代码 到目前为止没有什么困难,我应该在dll项目类型、类库中执行此操作,并且不使用任何特定的windows窗体控件 这能实现吗,如果是,请给我一些例子或学习材料 谢谢。您是否正在寻找一个?您可以使用键获取全局键盘输入。由于在C#中执行此操作将要求您以P/调用本机API中的几乎所有功能,因此您最好使用C/C++编写DLL并删除.NET依赖项。不,除非您希望从Windows窗体控件捕获关键事件,否则无法使用托管代码库完成此操作(System.Windo
谢谢。您是否正在寻找一个?您可以使用键获取全局键盘输入。由于在C#中执行此操作将要求您以P/调用本机API中的几乎所有功能,因此您最好使用C/C++编写DLL并删除.NET依赖项。
不,除非您希望从Windows窗体控件捕获关键事件,否则无法使用托管代码库完成此操作(
System.Windows.Forms.Control
)否则,您将不得不导入本机代码来处理键盘事件钩子。没有办法,即使用p/Unjk在C语言中编写全局钩子,只需要低级键盘和鼠标钩子。因此,您可能可以调用/调用整个钩子,或者只调用一个自编写的C++ DLL,但无论如何它都有很多工作。
我会想办法用热键做你想做的事,这样你就不需要钩子了
祝你好运,Alex你可以使用
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.");
}
}
因为所有钩子函数都是从原生Windows API中调用的,所以在C++中写DLL的意义是什么?@ SLVIK262,因为.NET没有提供类似的功能。我的意思是,与C/C++不同的是,您可以编写所有相同的代码,几乎是行的,在C++中。DLL不依赖于.NETFramework,将是非常快,而且不必通过托管语言调用本机调用。@slavik262,OP可能正在寻找一种从托管应用程序中使用此DLL的方法。如果您使用非托管代码编写此DLL,则必须执行P/invoke才能使用它。是的,但您只需执行一个P/invoke来设置挂钩和另一个在.NET中编写钩子本身需要在每次击键时调用本机功能(对于
CallNextHookEx
)。