我使用 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 窗口,但我试图写一些没有成功的东西。