我有一个只有消息的窗口(ATL :: CWindowImpl),它使用RIDEV_INPUTSINK标志注册自己的原始input,这意味着无论窗口是否为前景窗口,它都会获得所有input。 当只有一个窗口的实例时,这很好用。
但是,当我创build超过1个窗口的实例,只有一个接收WM_INPUT消息(我目前正在创build两个,只有第二个被创build获取消息)。
在创build两个窗口期间,RegisterRawInputDevices(使用RIDEV_INPUTSINK | RIDEV_NOLEGACY)成功。 此外,窗口没有收到原始input仍然收到其他消息,所以这不是一个窗口本身的问题…
如果它是相关的,我使用的VC11testing版,窗口创build和调度消息在不同的线程(使用std ::线程)。
这是一个API限制(即每个进程仅限于一个input接收器)? 还是有办法让这个工作?
提前致谢。
编辑:
现在我目前的解决方法是只有一个窗口,并将input消息传递给其他窗口,但是这是一个混乱,并不会在我希望它的工作(我有我的情况下应用程序加载插件可能需要原始input,我不希望他们必须注册我的应用程序,除非我真的必须这样做…)。
从MSDN( 这里和这里 ),原始输入的整个API总是关于应用程序,而不是关于窗口…这意味着注册原始输入的应用程序将作为一个实体操作系统被传送…您间接证明注册第二个接收窗口 – 第一个刚刚停止接收,因为操作系统向应用程序提供了原始输入(由onw窗口表示为接收器)。