Python实现按键精灵版的连点器

 更新时间:2023年06月12日 08:43:34   作者:小锋学长生活大爆炸  
这篇文章主要为大家详细介绍了如何利用Python实现按键精灵版的连点器,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下

Python版

需要用到的库:

pip install pynput pyautoit

实现代码:

import tkinter as tk
from tkinter import ttk
import time
import autoit
import threading
from tkinter import messagebox
from pynput import keyboard
import sys
 
# 增大迭代限制
sys.setrecursionlimit(1000000000)
 
class App:
    def __init__(self, master):
        self.master = master
        master.title("简易连点器-小锋学长生活大爆炸(ESC键停止)")
        # 设置连点的时间间隔,单位为毫秒
        self.interval = 0.5
        # 连点计数器
        self.click_count = 0
        self.click_total = 10
        # 创建输入框
        self.x_label = tk.Label(master, text="X坐标:", width=15)
        self.x_label.grid(row=0, column=0, padx=5, pady=10)
        self.x_entry = tk.Entry(master, width=10)
        self.x_entry.insert(tk.END, "100")
        self.x_entry.grid(row=0, column=1, padx=5, pady=10)
        self.y_label = tk.Label(master, text="Y坐标:", width=15)
        self.y_label.grid(row=1, column=0, padx=5, pady=10)
        self.y_entry = tk.Entry(master, width=10)
        self.y_entry.insert(tk.END, "100")
        self.y_entry.grid(row=1, column=1, padx=5, pady=10)
        # 增加self.click_total的输入框
        self.total_label = tk.Label(master, text="点击总数(0为无限):", width=15)
        self.total_label.grid(row=2, column=0, padx=5, pady=10)
        self.total_entry = tk.Entry(master, width=10)
        self.total_entry.insert(tk.END, "10")
        self.total_entry.grid(row=2, column=1, padx=5, pady=10)
        # 增加self.interval的输入框
        self.interval_label = tk.Label(master, text="点击间隔(ms):", width=15)
        self.interval_label.grid(row=3, column=0, padx=5, pady=10)
        self.interval_entry = tk.Entry(master, width=10)
        self.interval_entry.insert(tk.END, "500")
        self.interval_entry.grid(row=3, column=1, padx=5, pady=10)
        # 创建进度条和标签
        self.progress_bar = ttk.Progressbar(master, orient="horizontal", mode="determinate")
        self.progress_bar.grid(row=4, column=0, padx=5, pady=10)
        self.progress_label = tk.Label(master, text="0 / {}".format(self.click_total), width=5)
        self.progress_label.grid(row=4, column=1, padx=5, pady=10)
        # 创建启动和停止按钮
        self.start_button = tk.Button(master, text="启动", command=self.start_click, width=5)
        self.start_button.grid(row=5, column=0, padx=5, pady=10)
        self.stop_button = tk.Button(master, text="停止", command=self.stop_click, width=5)
        self.stop_button.grid(row=5, column=1, padx=5, pady=10)
         
        # 创建一个标志,表示是否按下了ESC键
        self.esc_pressed = False
    def start_click(self):
        # 启动连点器
        self.x = int(self.x_entry.get())
        self.y = int(self.y_entry.get())
        self.click_count = 0
        self.running = True
        self.click_total = int(self.total_entry.get()) or 1e9
        self.interval = int(self.interval_entry.get()) / 1000
        self.progress_bar["maximum"] = self.click_total
        self.progress_bar["value"] = 0
         # 创建一个子线程,用于监听键盘是否按下ESC键
        self.listener_thread = threading.Thread(target=self.listener_start)
        self.listener_thread.start()
        while self.running and self.click_count < self.click_total:
            self.click_count += 1
            # 鼠标左键点击
            autoit.mouse_click("left", self.x, self.y)
            # 等待interval毫秒
            time.sleep(self.interval)
            # 更新进度条和标签
            self.progress_bar["value"] = self.click_count
            self.progress_label["text"] = "{} / {}".format(self.click_count, self.click_total)
            self.master.update()
             # 如果按下了ESC键,则停止连点器
            if self.esc_pressed:
                self.stop_click()
                break
        # 点击结束后,停止子线程
        self.listener_thread.join()
        messagebox.showinfo("提示", "连点器已停止")
    def stop_click(self):
        # 停止连点器
        self.running = False
        self.esc_pressed = False
    def listener_on_press(self, key):
        try:
            if key.char == keyboard.Key.esc:
                print("ESC is pressed")
        except AttributeError:
            pass
    def listener_on_release(self, key):
        if key == keyboard.Key.esc:
            return False
    def listener_start(self):
        # 监听键盘是否按下ESC键
        while self.running:
            # 启动键盘监听器
            with keyboard.Listener(on_press=self.listener_on_press, on_release=self.listener_on_release) as listener:
                listener.join()
                self.esc_pressed = True
                break
root = tk.Tk()
app = App(root)
# 设置窗口置顶
root.wm_attributes("-topmost", True)
root.mainloop()

按键精灵版

实现代码

/*
	API指南:https://zimaoxy.com/q/categories/02-%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4/
*/
// 坐标定义区
top_left_x = 1470  // 窗口左上角x坐标,不包括标题栏,只需要修改这两个
top_left_y = 43// 窗口左上角y坐标,不包括标题栏,只需要修改这两个
win_width = 450    // 窗口宽度
win_height = 800   // 窗口高度
// 点击位置
click_x = top_left_x + win_width/2    // 1625
click_y = top_left_y + win_height/3*2 // 703
// 战斗按钮的点击/找色位置
btn_fight_w = 100
btn_fight_h = 80
btn_fight_tx = top_left_x + win_width/2 - btn_fight_w/2  // 左上角
btn_fight_ty = top_left_y + win_height - btn_fight_h     // 左上角
btn_fight_cx = btn_fight_tx + btn_fight_w/2  // 中心
btn_fight_cy = btn_fight_ty + btn_fight_h/2   // 中心
// 其他变量定义区
esc_key_code = 27  // ESC按键编号
btn_fight_active_color = "234B75"
club_msgbox_color = "12110F"
// 函数定义区
Function ClickAtFightBtn()
	MoveTo btn_fight_cx, btn_fight_cy
	Delay 10
	LeftClick 1
End Function
Function ClickAtClicArea()
	MoveTo click_x, click_y
	Delay 100
	LeftClick 1
	Delay 100
End Function
// 移动到战斗位置
Call ClickAtFightBtn()
cnt = 0
// 开始点击
Do While 1
	cnt = cnt + 1
	If cnt = 10000 Then 
		cnt = 0
		Call ClickAtFightBtn()
	End If
	// 判断是否按下esc键导致终止
	last_key = GetLastKey()   
	If last_key=esc_key_code Then  
    	Exit Do
	End If
	// 判断鼠标是否被移动
	GetCursorPos x, y
	If x <> click_x And y <> click_y Then
    	Call ClickAtClicArea()
	End If
	LeftClick 1
	Delay 10
Loop
Sub OnScriptExit()
    MessageBox "脚本已经停止!"
End Sub

到此这篇关于Python实现按键精灵版的连点器的文章就介绍到这了,更多相关Python连点器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用python调整Excel行高和列宽的操作示例

    利用python调整Excel行高和列宽的操作示例

    在Excel中,默认的行高和列宽可能不足以完全显示某些单元格中的内容,特别是当内容较长时,通过调整行高和列宽,可以确保所有数据都能完整显示,避免内容被截断,本文将介绍如何通过Python调整Excel的行高列宽、或设置自适应行高列宽,需要的朋友可以参考下
    2024-11-11
  • python获取本机所有IP地址的方法

    python获取本机所有IP地址的方法

    这篇文章主要为大家详细介绍了python获取本机所有IP地址的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • cython加速python代码的方法实现

    cython加速python代码的方法实现

    本文主要介绍了cython加速python代码的方法实现,特别是在涉及到数值计算密集型任务时,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Python中匹配模糊的字符串问题分析

    Python中匹配模糊的字符串问题分析

    这篇文章主要介绍了Python中匹配模糊的字符串的过程,我们将学习如何使用process 模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串,需要的朋友可以参考下
    2023-09-09
  • Python datetime时间格式化去掉前导0

    Python datetime时间格式化去掉前导0

    Python datetime时间格式化去掉前导0,在format string的%与flag之间,添加一个“-”即可
    2014-07-07
  • Python远程视频监控程序的实例代码

    Python远程视频监控程序的实例代码

    这篇文章主要介绍了Python远程视频监控程序的实例代码,需要的朋友可以参考下
    2019-05-05
  • python标准库turtle海龟绘图实现简单奥运五环

    python标准库turtle海龟绘图实现简单奥运五环

    这篇文章主要为大家介绍了python使用turtle实现最简单简单奥运五环绘图,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 一行代码解决动态执行Python函数方法实例

    一行代码解决动态执行Python函数方法实例

    这篇文章主要为大家介绍了如何用一行代码解决动态执行Python函数方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Windows安装多个不同版本Python并切换使用的步骤

    Windows安装多个不同版本Python并切换使用的步骤

    这篇文章主要介绍了如何在已安装Python 3.11的Windows电脑上安装并切换到Python 3.9,首先下载并安装Python 3.9,然后通过修改系统环境变量的Path来优先使用Python 3.9,需要的朋友可以参考下
    2024-11-11
  • 拓扑排序Python实现的过程

    拓扑排序Python实现的过程

    这篇文章主要介绍了拓扑排序Python实现的过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论