【发布时间】:2011-07-23 14:22:16
【问题描述】:
是否可以在没有窗口的情况下使用 Windows Raw Input API(即来自控制台应用程序)?
我尝试使用 RegisterRawInputDevices,但我的消息循环似乎没有从 GetMessage 获得 任何 事件,因此只是“挂起”。
【问题讨论】:
标签: windows console raw-input message-loop
是否可以在没有窗口的情况下使用 Windows Raw Input API(即来自控制台应用程序)?
我尝试使用 RegisterRawInputDevices,但我的消息循环似乎没有从 GetMessage 获得 任何 事件,因此只是“挂起”。
【问题讨论】:
标签: windows console raw-input message-loop
我就是那样做的(不确定是不是最舒服的方法……):
我已经启动了一个线程(用于填充我的输入缓冲区的任务)。 在这个线程中,我创建了一个带有适当窗口类的仅消息窗口(它是隐藏的,并且可以获取输入数据)。
然后注册原始输入设备。
这个线程有它自己的消息处理循环。 在窗口类的 WindowProc 中,我处理了输入。
(对于缓冲区,您可以使用 boost:circular_buffer,它 ROCKS!:D)
在此解决方案中,您确实需要一个窗口,但看起来您不需要。 :)
我希望这会有所帮助。
【讨论】:
你的意思是RegisterRawInputDevices?
由于RAWINPUTDEVICE 结构要求您指定HWND 来接收WM_INPUT 消息,因此没有窗口是不可能做到这一点的。
控制台应用程序可以创建窗口,并且窗口可能在隐藏时可以接收WM_INPUT,但您确实需要一个窗口。
【讨论】:
hwndTarget NULL 可能是允许的,但这并不意味着像它那样“发送到线程”,例如PostMessage。如果您没有窗口,那么您就没有活动窗口,并且不会收到WM_INPUT 消息。