多个原始输入窗口接收器

时间:2012-03-14 13:24:56

标签: c++ windows winapi keyboard raw-input

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

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

在创建两个窗口期间,

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

如果它是相关的,我正在使用VC11 beta,并且创建了Windows并在不同的线程上调度消息(使用std :: thread)。

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

提前致谢。

编辑:

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

1 个答案:

答案 0 :(得分:5)

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