Windowsの下でPythonでマウスクリックをシミュレート


本文は私のブログに先発します
Windowsでのシミュレーションでは、pythonは一般的にwin32apiを採用しているほか、C++なども同様の機能を実現できるが、pythonは簡潔で多く、Windowsに慣れていない人に適している.
実は最初は他の人が書いたプロジェクトを見つけて直接使いたいのですが、残念ながら実行に失敗し、一部の需要が満たされていないので、興味があればPyUserInputを直接試してみることができます.
マウスシミュレーション
これは基本的にPyUserInputと同じで、私の需要はそんなに複雑ではないので、部分だけを使って、興味があるのはソースコードPyUserInput/pymouseを見ることができます
マウスの基本操作はpress(押す)、release(放す)、scroll(転がる、ここでは書かない)、move(移動)の基本操作に加えてclick(押す+放す)、drag(押す+移動+放す)に分けられます.
プレス押下
シミュレーションはスクリーン(x,y)の位置でマウスを押し、button=1は左ボタン、button=2は右ボタン
ここではクリック操作のみをシミュレートしており、マウスの位置は変更されていません.
import win32api

def press(x, y, button=1):
    buttonAction = 2 ** ((2 * button) - 1)
    win32api.mouse_event(buttonAction, x, y)

リリース
操作同上
import win32api

def release(x, y, button=1):
    buttonAction = 2 ** ((2 * button))
    win32api.mouse_event(buttonAction, x, y)

移動
ここではマウスを(x,y)の位置に設定するだけで、アニメーションプロセスはありません(このコードを書いて考えても必要ないでしょう)ctypesというライブラリを採用しています
import ctypes

def move(x, y):
    ctypes.windll.user32.SetCursorPos(x, y)

クリック
クリック=押す+放す
def click(x, y, button=1):
    press(x, y, button)
    release(x, y, button)

Dragドラッグ
ドラッグ=位置1押し+位置2放し
def drag(x1, y1, x2, y2):
    self.press(x1, y1)
    self.release(x2, y2)

現在のマウス位置を取得
ここでは、ctypesにこの機能を実現できる関数がありますが、入力されたパラメータは少し奇妙で、入力された指定されたタイプのインスタンスであり、座標点を直接このインスタンスに返します.
import ctypes

class Point(ctypes.Structure):
    _fields_ = [("x", ctypes.c_ulong),
                ("y", ctypes.c_ulong)]

def get_pos():
    point = Point()
    ctypes.windll.user32.GetCursorPos(ctypes.byref(point))
    return point.x, point.y

参考資料
  • PyUserInput
  • autoops_for_win