1

以下のスクリプトは、たとえば Windows の [スタート] ボタンをクリックしたい場合には完全に機能しますが、特定の GUI プログラムのボタンをクリックしようとすると、何の効果もありません。

このプログラムが仮想マウス クリックを無効にしている可能性はありますか? もしそうなら、どうにかしてこれを回避できますか?

import win32api, win32con
Po=win32api.GetCursorPos()
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,Po[0],Po[1],0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,Po[0],Po[1],0,0)
4

3 に答える 3

1

プログラムによって生成されたマウス イベントには、アプリが必要に応じてフィルター処理できる "注入された" プロパティがあります。たとえば、MMO クライアントは、ボットを回避するためにそれらをフィルター処理することがよくあります。

mouse_event のこれらのゼロにより、いくつかのプロパティを設定できます。それらが注入されたフラグを克服できるかどうかを調査することをお勧めしますが、すぐに方法を見つけることはできません

于 2012-05-04T19:29:15.137 に答える
1

mouse_event (および、入力に使用するのに推奨される API である SendInput) には、いくつかのトリッキーなビットがあります。これ を使用する前に、mouse_event の MSDN ページを完全かつ慎重に読むことをお勧めします。小さな活字に注意してください。特に、 x と y の値はピクセルではないため、GetCursorPos から取得した値をそのまま入力することはできません。

たまたま 0,0 が左下隅であるため、左下近くのポイントは画面のほぼ同じ領域にありますが、そこから離れれば離れるほど、ピクセル値は実際の単位から離れます。この API が使用するもの: スタート ボタンの近くの位置 (画面の左下にあると仮定) では機能しているように見えますが、他の値では、他の場所をクリックしているように見える場合があります。見る。

MSDN から:

dx [入力]
タイプ: DWORD
MOUSEEVENTF_ABSOLUTE の設定に応じて、最後のマウス イベントが生成されてからの x 軸に沿ったマウスの絶対位置またはその移動量。絶対データは、マウスの実際の x 座標として指定されます。相対データは、移動したミッキーの数として指定されます。ミッキーは、マウスが移動したことを報告するために移動する必要がある量です。

したがって、まず、MOUTEVENTF_ABSOLUTE フラグが必要です。しかし、それだけではありません:

備考
... MOUSEEVENTF_ABSOLUTE 値が指定されている場合、dx と dy は 0 ~ 65,535 の正規化された絶対座標を含みます。イベント プロシージャは、これらの座標を表示面にマップします。座標 (0,0) は表示面の左上隅にマップされ、(65535,65535) は右下隅にマップされます。

...そのため、この API に渡す前に、ターゲット座標を適切にスケーリングする必要があります。

于 2012-05-06T03:40:57.863 に答える