多个原始输入窗口接收器

Rap*_*tor 5 c++ windows keyboard winapi raw-input

我有一个仅消息窗口(ATL :: CWindowImpl),它使用RIDEV_INPUTSINK标志为原始输入注册自己,这意味着无论窗口是否是前台窗口,它都会获得所有输入.当只有一个窗口的实例时,这很有效.

但是,当我创建多个窗口实例时,只有一个接收WM_INPUT消息(我当前正在创建两个消息,并且只有第二个要创建消息).

在创建两个窗口期间,RegisterRawInputDevices(使用RIDEV_INPUTSINK | RIDEV_NOLEGACY)正在成功.此外,没有接收原始输入的窗口仍在接收其他消息,因此窗口本身不存在问题......

如果它是相关的,我正在使用VC11测试版,并创建窗口并在不同的线程上调度消息(使用std :: thread).

这是API限制(即每个进程只限一个输入接收器)吗?或者有没有办法让这个工作?

提前致谢.

编辑:

现在我当前的解决方法是只有一个窗口,并将输入消息传递给其他窗口,但这是一个烂摊子,并且在我希望它工作的情况下不能工作(我有我的地方) app加载可能需要原始输入的插件,我不希望他们必须注册我的应用程序,除非我真的必须这样做...).

Yah*_*hia 5

从MSDN(这里这里),原始输入的整个API总是关于应用程序而不是关于窗口...这意味着注册原始输入的应用程序将被操作系统作为一个权利进行交易...您间接证明了注册第二个接收winow - 第一个刚刚停止接收,因为操作系统向应用程序提供原始输入(由正好onw窗口表示为接收器).