1

私は自動化の大ファンなので、機会があればいつでも、繰り返さなければならないタスクを自動化してみるのが好きです。次のコードを使用すると、通常、画面上のどこにいてもマウスをクリックできます (および、どのようなアプリケーションでも)。

Public Declare Auto Function SetCursorPos Lib "User32.dll" (ByVal X As Integer, ByVal Y As Integer) As Long

Public Declare Auto Function GetCursorPos Lib "User32.dll" (ByRef lpPoint As Point) As Long

Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down

Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down

Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up

Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down

Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up

これは通常問題なく動作します。私はそれをさまざまなアプリケーションで使用して、大きな効果を上げてきました。ただし、マウスとキーボードのコマンドを完全に無視しているように見えるアプリケーションに対して、マウスのクリック (およびキーストロークの送信) を実行しようとしています。マウスがプログラムでカバーされている画面の領域に移動すると、移動したり、クリックしたりしませんが、手動でマウスを離すと、正しく機能していたかのようにプロセスが続行されます。

それで、プログラムでマウスを制御する他の方法はありますか?

4

1 に答える 1

4

どのバージョンの Windows を使用していますか?

Vista+ を使用している場合、ターゲット アプリケーションは昇格されたアクセス許可で実行されていますか?

はいの場合、アプリケーションも昇格されたアクセス許可で実行されていますか?

いいえの場合は、以下を参照してください: UIPI

新しいバージョンの Windows では、権限の低いアプリケーションが、権限の高いアプリケーションにメッセージを送信することを積極的に禁止しています。これを回避する方法はいくつかあります。昇格されたアクセス許可でアプリケーションを実行するか、trueに設定されたアプリケーション マニフェストを含めることです。uiAccess後者の場合、アプリケーションは Authenticode で署名されている必要があり、信頼できる場所 (Program Filesディレクトリなど) から実行する必要があります。

そうしないと、新しいハードウェア ドライバーを導入せずにマウス アクティビティを低レベルでシミュレートする方法がありません。ハードウェア ドライバーはRing-0で実行され、実際のマウス アクティビティ (「偽の」メッセージだけでなく) を完全にシミュレートするには、このレベルで実行する必要があります。

于 2014-03-28T14:50:39.770 に答える