wiimote に似たデバイスを作成しました。これを Windows (8.1) でマウスとして使用したいと考えています。デバイスは tcp 経由で Windows コンピューターの c++ win32 プログラムに接続し、マウス カーソルが移動する位置を送信します。SetCursorPos 関数を使用して位置を設定しています。これは、ほとんどのプログラムを制御するのに最適です。しかし、例えばタスクマネージャを制御しようとすると、カーソルが動かなくなります。タスクマネージャーから別のプログラムに切り替えると、再び機能します。また、同じ結果で SendInput 関数を使用しようとしました。
これは私のコードがSendInputでどのように見えるかです:
INPUT Input = { 0 };
Input.type = INPUT_MOUSE;
Input.mi.dx = (LONG)posX;
Input.mi.dy = (LONG)posY;
// set move cursor directly
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
SendInput(1, &Input, sizeof(INPUT));
SetCursorPos を使用すると、次の 1 行で済みます。
SetCursorPos(posX, posY);
一部のプログラムで機能しない理由を誰か教えてもらえますか? カーソルを制御するスマートフォンアプリを試してみたところ、すべてのプログラムで機能したので、これが可能でなければならないことはわかっています。