win32api を使用して小さな Python スクリプトを作成し、人気のあるゲームCookie Clicker (大きな Cookie をクリックしてポイントを獲得する必要があるゲーム) で使用します。それを行う「auto_clicker」と呼ばれる機能があります。ユーザーが定義したポイントで画面をクリックし続けます。これはスクリプトです:
# -*- coding: utf-8 -*-
import win32con
import win32api
def clicker(x,y):
"""Clicks on given position x,y
Input:
x -- Horizontal position in pixels, starts from top-left position
y -- Vertical position in pixels, start from top-left position
"""
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
def auto_clicker(x = -1,y = -1):
"""Keep clicking on position x,y. If no input is given, gets from actual
mouse position.
"""
if x == -1 | y == -1:
x,y = win32api.GetCursorPos()
while True:
clicker(x,y)
それはうまく機能しますが、いくつかの改善を加えたいです:
関数が呼び出されたときにユーザーがクリックしたときにのみカーソル位置を取得するにはどうすればよいですか? win32api には必要なものがすべて含まれているように見えるので、別のモジュールを追加したくありません。この方法を試してみ ましたが成功しませんでした。
「Escape」のようなキープレスを検出するにはどうすればよいので、現在使用している醜いハックなしでプログラムを終了できます (Ctrl+Alt+Del は SetCursorPos にアクセスを拒否しているように見えるため、Python はエラーをスローしてプログラムを終了します)。
このプログラムを移植可能にできますか? Tkinter を使用して非表示の Tk ウィンドウを生成できるようですが、何かを書き込もうとしましたが成功しませんでした。