別のプロセスに属するウィンドウで単純なマウスの動きをエミュレートしようとしています。私のアプリは、グローバル フックを使用して DLL をターゲット プロセス (WH_CBT
およびWH_GETMESSAGE
) に注入します。注入は魔法のように機能します。その意図は、マウスが画面の一部の上に移動したとターゲット プロセスを騙すことです。物理的なマウスで移動すると、特定のアプリの動作がトリガーされます (ツールチップが表示されるなど)。「トリック」を実行するときに、実際のマウス ポインターが現在の位置にとどまるとよいと思います。
Spy++ でメッセージ監視を確立しました。プレーンな WM_MOUSEMOVE メッセージをターゲット HWND に送信 (または投稿) することは、Spy++ によって登録されますが、目的の効果はありません。マウスが物理的に動かされると、アプリはそのことを行います。WM_MOUSEMOVE と組み合わせて他のメッセージ (WM_SETCURSOR など) を送信しようとしましたが、状況は改善されませんでした。ターゲット プロセスでGetCursorPosをハイジャックして、WM_MOUSEMOVE (前者は画面、後者はクライアント) に投稿されたものと同じ座標を返しましたが、これも役に立ちませんでした。
単純なSetCursorPosを実行すると、アプリは本来の動作を実行します。SetCursorPos が行っていること以外に、私が見逃している魔法は何ですか? Spy++ によってキャプチャされたメッセージは、どちらのシナリオでもほぼ同じように見えます。
マウスの動きを送信する方法に関する提案は大歓迎です。SendInput、mouse_event、またはその他の API を使用したくありません。非常に短い期間、特定の HWND をターゲットにする必要があります。