在没有窗口的情况下(例如从控制台应用程序),是否可以使用Windows原始输入API?
我尝试使用RegisterRawInputDevices,但我的消息循环似乎没有从GetMessage接收任何事件,因此只是卡在那里。
在没有窗口的情况下(例如从控制台应用程序),是否可以使用Windows原始输入API?
我尝试使用RegisterRawInputDevices,但我的消息循环似乎没有从GetMessage接收任何事件,因此只是卡在那里。
我是这样做的(不确定是否是最舒适的方式...):
我启动了一个线程(用于填充我的输入缓冲区)。 在这个线程中,我创建了一个消息窗口(它是隐藏的,并可以获取输入数据),并使用适当的窗口类。
然后注册原始输入设备。
这个线程有它自己的消息处理循环。 在窗口类的WindowProc中,我处理输入。
(对于缓冲区,您可以使用boost:circular_buffer,它非常好用!:D)
在这个解决方案中,您需要一个窗口,但看起来您不需要。:)
希望这可以帮助您。
RAWINPUTDEVICE
结构需要你指定一个HWND
来接收WM_INPUT
消息,因此没有窗口是不可能做到的。
控制台应用程序可以创建窗口,而且即使隐藏,该窗口也可能会接收WM_INPUT
,但你确实需要一个窗口。
hwndTarget
为NULL可能是允许的,但这并不意味着像使用PostMessage
一样“发送到线程”。如果您没有窗口,则没有活动窗口,也不会有任何WM_INPUT
消息。 - Ben Voigt