我们有一个3D应用程序,可通过IDirectInputDevice8检索键盘按下。有什么办法,当我们通过win32 API winproc循环回溯键盘事件时,我们可以将这些命令发送到DirectInputDevice吗?
答案 0 :(得分:1)
Windows在幕后轮询键盘硬件。当关键事件发生时,它会将相应的WM_ *消息添加到Windows消息队列中(包含键盘状态的相关信息)。 windows message pump将这些消息从队列中拉出并相应地处理它们。这种方法的主要好处是你不必为了掌握键盘事件而做很多事情(不需要知道键盘布局/硬件)。缺点是它确实不是实时的。
通过DirectInput与键盘通话实际上是相似的,但是由你来完成轮询。通常,您使用DirectInput设置键盘设备,然后每次运行更新循环时,使用GetDeviceState() 轮询键盘状态。由您来跟踪民意调查之间的键盘状态。最好的做法是创建一个包装此功能的对象,并可能触发事件/回调或在适当的时间在队列中创建一个命令条目,以便更好地使用它。这种方法的优点是速度快,因为您可以直接与硬件通信,并可以立即调用更新。缺点是你必须手动完成这些工作,这需要花费一些时间来设置和正确。
查看this example如何使用DirectInput查询键盘。
所以你的问题有几个答案:
我希望有所帮助。祝你好运!
答案 1 :(得分:0)
wndproc将在键盘事件中发送这些消息的组合:
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_KEYDOWN
WM_KEYUP
WM_CHAR