是否可以在没有窗口的情况下使用 Windows 原始输入 API(即从控制台应用程序)?
是否可以在没有窗口的情况下使用 Windows 原始输入 API(即从控制台应用程序)?
我尝试过使用 RegisterRawInputDevices,但我的消息循环似乎没有从 GetMessage 获取任何事件,因此只是“挂起”在那里。
Is it possible to use Windows Raw Input API without a window (ie from a console application)?
I've tried using RegisterRawInputDevices but my message loops doesn't seem to get any events from GetMessage and hence just 'hangs' there.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我就这样做了(不确定这是最舒服的方式......):
我已经启动了一个线程(用于填充输入缓冲区的任务)。
在此线程中,我使用适当的窗口类创建了一个仅消息窗口(其隐藏,并且可以获取输入数据)。
然后注册原始输入设备。
该线程有自己的消息处理程序循环。
在窗口类的 WindowProc 中,我处理了输入。
(对于缓冲区,您可以使用 boost:circular_buffer,这太棒了!:D)
在这个解决方案中,您确实需要一个窗口,但看起来您不需要。 :)
我希望这能有所帮助。
That way I did it (not sure it is the most comfortable way...):
I have started a thread (for the task of filling my input buffer).
In this thread I have created a message-only window (its hidden, and can get input datas) with an appropriate window-class.
Then registered the raw input devices.
This thread has its own message handler loop.
In the WindowProc of the window-class I've handled the inputs.
(For buffer, You can use boost:circular_buffer, it ROCKS! :D)
In this solution You did need have a window, but it looks like You don't. :)
I hope this can help.
您的意思是
RegisterRawInputDevices
吗?由于
RAWINPUTDEVICE
结构要求您指定HWND
来接收WM_INPUT
消息,因此如果没有窗口,就不可能执行此操作。控制台应用程序可以创建窗口,并且窗口在隐藏时可能可以接收
WM_INPUT
,但您确实需要一个窗口。Do you mean
RegisterRawInputDevices
?Since the
RAWINPUTDEVICE
structure requires you to specify anHWND
to receive theWM_INPUT
messages, no it's not possible to do this without a window.Console applications can create windows, and the window probably can receive
WM_INPUT
while hidden, but you do need a window.