是否可以在没有窗口的情况下(即从控制台应用程序中)使用Windows原始输入API?

4

在没有窗口的情况下(例如从控制台应用程序),是否可以使用Windows原始输入API?

我尝试使用RegisterRawInputDevices,但我的消息循环似乎没有从GetMessage接收任何事件,因此只是卡在那里。

2个回答

7

我是这样做的(不确定是否是最舒适的方式...):

我启动了一个线程(用于填充我的输入缓冲区)。 在这个线程中,我创建了一个消息窗口(它是隐藏的,并可以获取输入数据),并使用适当的窗口类。

然后注册原始输入设备。

这个线程有它自己的消息处理循环。 在窗口类的WindowProc中,我处理输入。

(对于缓冲区,您可以使用boost:circular_buffer,它非常好用!:D)

在这个解决方案中,您需要一个窗口,但看起来您不需要。:)

希望这可以帮助您。


2

你是指RegisterRawInputDevices吗?

RAWINPUTDEVICE结构需要你指定一个HWND来接收WM_INPUT消息,因此没有窗口是不可能做到的。

控制台应用程序可以创建窗口,而且即使隐藏,该窗口也可能会接收WM_INPUT,但你确实需要一个窗口。


是的,这就是我的意思。RAWINPUTDEVICE似乎可以使用hwndTarget为NULL来跟随活动窗口,但它需要一个WindowProc来获取WM_INPUT消息。 - Adam M-W
@Adam:hwndTarget为NULL可能是允许的,但这并不意味着像使用PostMessage一样“发送到线程”。如果您没有窗口,则没有活动窗口,也不会有任何WM_INPUT消息。 - Ben Voigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接