他に誰も答えていないので、これまでにわかったことを報告します。私が知る限り、Windows でマウス データを記録する方法は少なくとも 5 つあります。
LowLevelMouseProcコールバック メカニズム。このアプローチの制限は、マウスから受け取った生データではなく、画面上のマウス カーソルの位置を報告することです。これは、データがすでに処理されていることを意味します。
マウス (またはその他の HID デバイス) から送信された生データをキャプチャする生入力 API 。
DirectInputを使用すると、生のマウスとキーボード (およびその他のデバイス) のデータを最小限の遅延でキャプチャできます。DirectInput の状況は、古い API とそれを置き換える新しい API であるため、少し混乱します。XInput は、古い API がサポートしていたすべてのデバイスをサポートしているわけではありません。
ユーザー モード プログラムでカーネル レベルのETW トレースをキャプチャできるようにするイベント トレース API 。
最下位レベルでマウス USB トラフィックをキャプチャする KMDF フィルター デバイス ドライバーを作成します。
最後のソリューションは、最も複雑で強力なソリューションです。実際にそれを行う商用アプリケーションはほとんどありません (さらに!)。例として、BusHound があります。
4番目のソリューション(ETWアプローチ)についてはよくわかりません。どうやら、最近のバージョンの Windows で最適に動作するようです。私が考えているのと似たようなことをするサンプル プログラムは見つかりませんでした (つまり、生のマウス イベントを記録します)。また、単純なテスト プログラムでさえ、かなりの労力をかけて作成する必要があるほど複雑に思えます。最後に、実際のマウス レポートを取得できるかどうかはわかりません。
2 番目のソリューションである未加工の入力 API は、驚くほど使いやすいものです。ほんの数時間でそれを使用する簡単なプログラムを作成できました。ただし、これには大きな制限があります。アプリケーションのウィンドウに送信される WM_INPUT メッセージに基づいているためです。タイミングが重要な場合 (私の場合はそうです)、アプリケーションのメッセージ ループがメッセージを順次処理するため、このアプローチは制限されます。したがって、マウス イベントが USB ポートによってキャプチャされてから、適切なメッセージ ハンドラが呼び出されるまでの遅延は、固定されていないか、制限されていません。
全体として、私は質問に対する簡単な答えを思いつきませんでした。