创建一个带有 F6 快捷键的自动点击器

创建一个带有 F6 快捷键的自动点击器
在许多情况下,自动化点击任务可以帮助我们节省大量时间和精力。本文将介绍如何使用 Python 和 Tkinter 创建一个简单的自动点击器,并通过 F6 键作为快捷键来控制点击器的开始和停止,即使应用程序在后台也能正常工作。

所需库
首先,我们需要安装一些必要的 Python 库:

tkinter:用于创建图形用户界面。
pyautogui:用于模拟鼠标点击。
pynput:用于监听全局键盘事件。
你可以使用以下命令来安装这些库:

pip install pyautogui pynput

项目结构

我们的自动点击器将包含以下功能:

  1. 通过 GUI 设置点击间隔、鼠标按键、点击方式、重复次数和延迟。
  2. 显示当前鼠标位置并允许手动获取鼠标位置。
  3. 使用 F6 键作为快捷键来开始和停止点击器,即使应用程序在后台也能正常工作。

代码实现

import tkinter as tk
from tkinter import ttk, messagebox
import pyautogui
import time
import threading
from pynput import keyboardclass AutomaticClicker(tk.Tk):def __init__(self):super().__init__()self.title("自动点击器")self.geometry("400x300")self.is_running = Falseself.interval = 0.01  # 默认间隔时间1秒self.mouse_button = "left"  # 默认左键点击self.click_type = "single"  # 默认单击self.repeat_times = 999  # 默认重复次数self.delay = 0  # 默认延迟为0msself.create_widgets()self.update_mouse_position()  # 开始实时更新鼠标位置# 设置全局键盘监听器self.listener = keyboard.Listener(on_press=self.on_key_press)self.listener.start()def create_widgets(self):# 每次鼠标点击的间隔时间interval_frame = ttk.Frame(self)interval_label = ttk.Label(interval_frame, text="每次鼠标点击的间隔时间(秒):")self.interval_entry = ttk.Entry(interval_frame, width=5)self.interval_entry.insert(0, str(self.interval))  # 默认值1秒interval_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))self.interval_entry.grid(row=0, column=1, padx=(0, 10), pady=(10, 0))interval_frame.pack(padx=10, fill=tk.X)# 鼠标按键mouse_button_frame = ttk.Frame(self)mouse_button_label = ttk.Label(mouse_button_frame, text="鼠标按键:")self.mouse_button_combobox = ttk.Combobox(mouse_button_frame, values=["鼠标左键", "鼠标右键"], state="readonly")self.mouse_button_combobox.current(0)  # 默认左键mouse_button_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))self.mouse_button_combobox.grid(row=0, column=1, padx=(0, 10), pady=(10, 0))mouse_button_frame.pack(padx=10, fill=tk.X)# 点击方式click_type_frame = ttk.Frame(self)click_type_label = ttk.Label(click_type_frame, text="点击方式:")self.click_type_combobox = ttk.Combobox(click_type_frame, values=["鼠标单击", "鼠标双击"], state="readonly")self.click_type_combobox.current(0)  # 默认单击click_type_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))self.click_type_combobox.grid(row=0, column=1, padx=(0, 10), pady=(10, 0))click_type_frame.pack(padx=10, fill=tk.X)# 重复次数repeat_times_frame = ttk.Frame(self)repeat_times_label = ttk.Label(repeat_times_frame, text="重复次数:")self.repeat_times_entry = ttk.Entry(repeat_times_frame, width=5)self.repeat_times_entry.insert(0, str(self.repeat_times))  # 默认1次repeat_times_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))self.repeat_times_entry.grid(row=0, column=1, padx=(0, 10), pady=(10, 0))repeat_times_frame.pack(padx=10, fill=tk.X)# 延迟delay_frame = ttk.Frame(self)delay_label = ttk.Label(delay_frame, text="延迟(ms):")self.delay_entry = ttk.Entry(delay_frame, width=5)self.delay_entry.insert(0, str(self.delay))  # 默认0msdelay_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))self.delay_entry.grid(row=0, column=1, padx=(0, 10), pady=(10, 0))delay_frame.pack(padx=10, fill=tk.X)# 显示当前鼠标位置self.position_label = ttk.Label(self, text="当前鼠标位置: ")self.position_label.pack(pady=(10, 0))# 获取鼠标位置按钮get_position_button = ttk.Button(self, text="手动获取当前鼠标位置", command=self.get_mouse_position)get_position_button.pack(pady=(10, 0))# 开始按钮self.start_button = ttk.Button(self, text="开始", command=self.start_clicking)self.start_button.pack(pady=(10, 0))# 停止按钮self.stop_button = ttk.Button(self, text="停止", command=self.stop_clicking, state=tk.DISABLED)self.stop_button.pack(padx=10, pady=(10, 0))def get_mouse_position(self):x, y = pyautogui.position()messagebox.showinfo("鼠标位置", f"X: {x}, Y: {y}")def update_mouse_position(self):x, y = pyautogui.position()self.position_label.config(text=f"当前鼠标位置: X: {x}, Y: {y}")self.after(100, self.update_mouse_position)  # 每100毫秒更新一次def start_clicking(self):self.update_settings()  # 更新设置if not self.is_running:self.is_running = Trueself.start_button["state"] = tk.DISABLEDself.stop_button["state"] = tk.NORMALself.thread = threading.Thread(target=self._async_start_clicking)self.thread.start()def _async_start_clicking(self):for _ in range(self.repeat_times):if not self.is_running:breakx, y = pyautogui.position()  # 获取当前鼠标位置pyautogui.moveTo(x, y)  # 移动鼠标到当前位置clicks = 2 if self.click_type == "double" else 1pyautogui.click(button=self.mouse_button, clicks=clicks, interval=self.interval)if self.delay > 0:time.sleep(self.delay / 1000.0)# 增加一个短暂的睡眠以允许主线程处理事件,比如停止请求time.sleep(0.01)def stop_clicking(self):self.is_running = Falseself.start_button["state"] = tk.NORMALself.stop_button["state"] = tk.DISABLEDif self.thread and self.thread.is_alive():self.thread.join()  # 等待线程结束def update_settings(self):try:self.interval = float(self.interval_entry.get())self.repeat_times = int(self.repeat_times_entry.get())self.delay = int(self.delay_entry.get())self.mouse_button = ("right" if self.mouse_button_combobox.get() == "鼠标右键" else "left")self.click_type = ("double" if self.click_type_combobox.get() == "鼠标双击" else "single")except ValueError:messagebox.showerror("错误", "请输入有效的数值。")self.stop_clicking()  # 如果有错误,则停止点击def on_key_press(self, key):try:if key == keyboard.Key.f6:self.toggle_clicking()except AttributeError:pass  # 忽略非字符键def toggle_clicking(self):if self.is_running:self.stop_clicking()else:self.start_clicking()if __name__ == "__main__":app = AutomaticClicker()app.mainloop()

总结

通过上述步骤,我们成功创建了一个带有 F6 快捷键的自动点击器。这个点击器不仅可以通过 GUI 控制,还可以通过全局键盘监听器在后台使用 F6 键进行控制。希望这篇博客对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542433.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【算法业务】互联网风控业务中的拒绝推断场景算法应用分享(涉及半监督算法、异常检测、变分自编码、样本权重自适应调整、迁移学习等)

1. 业务目标和任务描述 该项目是很早期的一个工作,属于互联网信贷风控场景,研究并应用信贷中的拒绝推断任务,处理方式也许对于目前的一些业务还有参考意义,因此这里做下分享。拒绝推断是指在信贷业务中,利用已知的接受…

《2024 年全球人工智能趋势报告》:GPU、数据架构依然是巨大挑战

导语:对于众多行业用户而言,了解人工智能如何改变行业、如何利用人工智能保持领先地位,已成为一道时代的必答题。全球著名调研机构WEKA近日正式发布《2024 年全球人工智能趋势报告》,该报告基于全球1500名人工智能决策者的深度调查…

【项目】基于 Huffman 算法实现文件压缩

摘要:记录通过学习Huffman算法自主实现简单的文件压缩程序的过程。 什么是文件压缩 在古诗词中,这种信息的高度浓缩体现得淋漓尽致。例如王维的《使至塞上》中的名句 “ 大漠孤烟直,长河落日圆 ”。仅仅十个字,却描绘出了一幅极为…

MoveIt控制机械臂的运动实现——机器人抓取系统基础系列(二)

文章目录 概要1 用户接口和代码案例2 不同的规划类型2.1 关节空间规划2.2 工作空间规划2.3 笛卡尔空间规划 3 MoveIt运行实操4 相关资料推荐小结 概要 MoveIt为开发者提供了针对机械臂的集成化开发平台,由一系列操作相关的功能包组成,包括运动规划、操作…

从 Affine Particle-In-Cell (APIC) 到 Material Point Method (MPM 物质点法)

APIC与MPM Particle-In-Cell (PIC)Affine Particle-In-Cell (APIC)Material Point Method (MPM)关于边界投影等额外操作 Material Point Method (MPM 物质点法)是一种混合欧拉-拉格朗日视角物理仿真方法。 欧拉视角即网格视角,将空间划分为网格,通过表示…

从一到无穷大 #35 Velox Parquet Reader 能力边界

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言源码分析功能描述功能展望 引言 InfluxDB IOX这样完全不使用索引,只…

JavaEE: 深入探索TCP网络编程的奇妙世界(四)

文章目录 TCP核心机制TCP核心机制四: 滑动窗口为啥要使用滑动窗口?滑动窗口介绍滑动窗口出现丢包咋办? TCP核心机制五: 流量控制 TCP核心机制 书接上文~ TCP核心机制四: 滑动窗口 为啥要使用滑动窗口? 之前我们讨论了确认应答策略,对每一个发送的数据段,都要给一个ACK确…

centos7下openssh升级方法(编译安装)

注意: 首先打开两个或以上的shell连接,因为在升级过程中如果升级失败会导致不发新建shell连接;升级后使用xshell6,7连接,openssh版本对应修改,下载地址: https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/por…

Servlet day2(概念理解)

Servlet体系结构 Servlet相关配置 HTTP协议内容

leetcode746. 使用最小花费爬楼梯,动态规划

leetcode746. 使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶…

计算机毕业设计 基于SpringBoot的小区运动中心预约管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Java笔试面试题AI答之设计模式(4)

文章目录 16. 简述什么是观察者模式?基本概念主要特点实现方式应用场景优缺点 17. 请列举观察者模式应用场景 ?18. 请用Java代码实现观察者模式的案例 ?19. 什么是装饰模式?定义与特点结构与角色工作原理优点应用场景示例 20. 请用…

基于大数据的电子产品需求数据分析系统的设计与实现(Python Vue Flask Mysql)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【GlobalMapper精品教程】088:按点线面空间位置选择案例

按点线面空间位置选择的原则为:点线面的排列组合。 文章目录 一、选择线要素附近的点二、选择相交或触碰所选线的区和线三、选择包含点的区要素四、选择选定区域内的点要素一、选择线要素附近的点 启动该工具之前,首先要选择线,例如,选择某一段铁路5km范围之内的县城驻地。…

DeepSeek 2.5本地部署的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…

[Meachines] [Medium] Sniper RFI包含远程SMB+ powershell用户横向+CHM武器化权限提升

信息收集 IP AddressOpening Ports10.10.10.151TCP:80,135,139,445,49667 $ nmap -p- 10.10.10.151 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-server-header: Microsoft-IIS/10.…

三阶魔方还原法 勾上回下 上右左左右

三阶魔方还原法: 1小白花 (转3换1) 2白十字架 (侧与中心同色 下下) 3第一层 (找位置角块放顶点 勾上回下) 4 第二层 (颜色边 勾上回下 再单白边 勾上回下) 5 黄十字架 (无黄边 压 勾…

0.设计模式总览——设计模式入门系列

在现代软件开发中,设计模式为我们提供了优秀的解决方案,帮助我们更好地组织代码和架构。本系列专栏将对设计模式的基本思想、原则,以及常用的分类、实现方式,案例对比、以及使用建议,旨在提高开发者对设计模式的理解和…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)课程表 .1- 题目解析 .2- 代码编写 2)课程表 II .1- 题目解析 .2- 代码编写 3)火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

HTML翻牌器:用CSS和HTML元素创造动态数字展示

HTML翻牌器:用CSS和HTML元素创造动态数字展示 前言 翻牌器是一种数字动态展示形式,在生活中常见的例如翻牌计分、翻牌时钟等。 之所以以翻牌的形式是因为其物理设计的原因使其只能滚动翻牌展示数字,在电子显示设备不普及时,使用…