RIDEV_INPUTSINK フラグを使用して未加工の入力を登録するメッセージのみのウィンドウ (ATL::CWindowImpl) があります。つまり、ウィンドウがフォアグラウンド ウィンドウであるかどうかに関係なく、すべての入力を取得します。これは、そのウィンドウのインスタンスが 1 つしかない場合にうまく機能します。
ただし、ウィンドウの複数のインスタンスを作成すると、WM_INPUT メッセージを受け取るのは 1 つだけです (現在 2 つ作成しており、作成する 2 番目のインスタンスだけがメッセージを取得します)。
RegisterRawInputDevices (RIDEV_INPUTSINK | RIDEV_NOLEGACY を使用) は、両方のウィンドウの作成中に成功しています。また、生の入力を受信していないウィンドウはまだ他のメッセージを受信しているため、ウィンドウ自体の問題ではありません...
関連する場合、私は VC11 ベータ版を使用しており、ウィンドウが作成され、さまざまなスレッドでメッセージがディスパッチされます (std::thread を使用)。
これは API の制限ですか (つまり、プロセスごとに 1 つの入力シンクに制限されています)? または、これを機能させる方法はありますか?
前もって感謝します。
編集:
現在の私の現在の回避策は、ウィンドウを 1 つだけにして、入力メッセージを他のウィンドウに渡すことですが、これは混乱しており、機能させたい場合には機能しません (生の入力を必要とする可能性のあるプラグインをロードするアプリ。本当にそのようにする必要がない限り、それらをアプリに登録する必要はありません...)。