【问题标题】:Is it possible to use Windows Raw Input API without a window (ie from a console application)?是否可以在没有窗口的情况下使用 Windows Raw Input API(即来自控制台应用程序)?
【发布时间】:2011-07-23 14:22:16
【问题描述】:

是否可以在没有窗口的情况下使用 Windows Raw Input API(即来自控制台应用程序)?

我尝试使用 RegisterRawInputDevices,但我的消息循环似乎没有从 GetMessage 获得 任何 事件,因此只是“挂起”。

【问题讨论】:

    标签: windows console raw-input message-loop


    【解决方案1】:

    我就是那样做的(不确定是不是最舒服的方法……):

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

    然后注册原始输入设备。

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

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

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

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      你的意思是RegisterRawInputDevices

      由于RAWINPUTDEVICE 结构要求您指定HWND 来接收WM_INPUT 消息,因此没有窗口是不可能做到这一点的。

      控制台应用程序可以创建窗口,并且窗口可能在隐藏时可以接收WM_INPUT,但您确实需要一个窗口。

      【讨论】:

      • 是的,我就是这个意思。 RAWINPUTDEVICE 似乎与 NULL 的 hwndTarget 一起工作,因为它跟随活动窗口,但它需要一个 WindowProc 来获取 WM_INPUT 消息。
      • @Adam: hwndTarget NULL 可能是允许的,但这并不意味着像它那样“发送到线程”,例如PostMessage。如果您没有窗口,那么您就没有活动窗口,并且不会收到WM_INPUT 消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多