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

时间:2010-12-17 12:47:21

标签: c# multithreading directinput

我需要在特定表单上按键快速检索键盘状态 - 足够快以至于Windows窗体的标准KeyUp / KeyDown事件不够快。有人告诉我试用DirectInput,但我没有使用图书馆或任何线程经验的经验,所以我不确定如何开始。

每次DirectInput在键盘状态下获取更改时,如何设置一个在表单上调用函数的线程?我知道如何初始化设备,并且SetEventNotification几乎是我想要的,但我不知道如何使用它。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

解决方案可能取决于当您说Windows的关键/关键事件不够快时的含义。它们当然以亚毫秒级的分辨率工作 - 这比大多数人的手指快得多 - 所以你希望通过“更快”地读取输入来实现什么好处?

您确定不仅仅是您的事件循环或代码会降低响应速度吗?

使用Windows函数GetAsyncKeyState / GetKeyState,您可以获得与DirectInput轮询键盘状态类似(相同?)的速度。我没有使用最新版本的DirectInput,但我很确定早期版本只使用相同的Win32事件进行非轮询键盘状态。 DirectInput的主要优点是它提供了对各种输入设备的通用抽象 - 它不是真正的'快速'键盘输入(无论这意味着什么)。

您可以在Microsoft自己的文档中看到“The use of DirectInput for keyboard and mouse input is not recommended...

答案 1 :(得分:0)

这可以帮助您,因为不必使用DirectInput:

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

http://msdn.microsoft.com/en-us/library/ms646293(v=vs.85).aspx

希望有所帮助