使用DirectInput在C#中检索键盘状态?

使用DirectInput在C#中检索键盘状态?,c#,multithreading,directinput,C#,Multithreading,Directinput,当在特定窗体上按下某个键时,我需要相当快地检索键盘状态—足够快,以至于windows窗体的标准KeyUp/KeyDown事件不够快。我被告知尝试DirectInput,但我没有使用该库的经验或任何线程经验,因此我根本不确定如何开始 我如何设置一个线程,每当DirectInput获取键盘状态的更改时,该线程都会调用表单上的函数?我知道如何初始化设备,SetEventNotification正是我想要的,但我不知道如何使用它 任何帮助都将不胜感激 解决方案可能取决于您所说的windows上键/下键事

当在特定窗体上按下某个键时,我需要相当快地检索键盘状态—足够快,以至于windows窗体的标准KeyUp/KeyDown事件不够快。我被告知尝试DirectInput,但我没有使用该库的经验或任何线程经验,因此我根本不确定如何开始

我如何设置一个线程,每当DirectInput获取键盘状态的更改时,该线程都会调用表单上的函数?我知道如何初始化设备,SetEventNotification正是我想要的,但我不知道如何使用它


任何帮助都将不胜感激

解决方案可能取决于您所说的windows上键/下键事件不够快的意思。它们的分辨率当然是亚毫秒,比大多数人的手指快得多。那么,你希望通过“更快地”读取输入来获得什么好处呢

您确定不仅仅是您的事件循环或代码减慢了响应速度吗

您可以使用windows函数GetAsyncKeyState/GetKeyState实现与DirectInput轮询键盘状态类似(相同?)的速度。我还没有使用最新版本的DirectInput,但我很确定早期版本只是对非轮询键盘状态使用了相同的Win32事件。DirectInput的主要优点是,它提供了对所有类型输入设备的通用抽象——它并不真正适用于“快速”键盘输入(不管这意味着什么)


您可以在Microsoft自己的文档中看到“”

这可能有助于您不必使用DirectInput:

[DllImport("user32.dll")]
private static 
extern short GetAsyncKeyState(System.Int32 vKey);

希望能有帮助