この問題を引き起こす可能性があるのは、UIPI または User Interface Privacy Isolation と呼ばれる UAC の別の側面です。昇格されていないプログラムが昇格されたプログラムの機能をハイジャックするのを防ぐように設計されています。これは確かに Regedit.exe の問題を説明しています。プログラムが UAC を指揮してレジストリに何かを突っ込むことができれば、明らかに UAC は効果がありません。この制限を回避するには、プログラムを昇格して実行する必要があります。
もう 1 つの問題は、SendMessage() がマウス入力を適切にシミュレートしないことです。送信するメッセージは通常、メッセージ キューにポストされます。代わりに PostMessage() を使用する必要があります。WM_MOUSEMOVE もエミュレートする必要があります。
マウス入力をシミュレートする適切な方法は、SendInput() を使用することです。これは、マウス ドライバーの動作を正確にエミュレートするものであり、プログラムが違いを見分ける方法はありません。ただし、自動化しようとしているプログラムがフォアグラウンドで実行されることを確認する必要があるという追加の要件があります。これは非常に難しく、SetForegroundWindow() の信頼性は十分ではありません。そのため、実際にマウス メッセージをフォアグラウンド ウィンドウにのみ送信したい場合にのみ、SendInput() を検討してください。