[Python] 纯文本查看 复制代码 import pyautogui
import time
import datetime
import threading
from pynput import keyboard
import tkinter as tk
from tkinter import ttk
class MilliClicker:
def __init__(self):
self.clicking = False
self.waiting = False
self.click_thread = None
# 默认设置
self.target_time = "23:59:59.500"
self.cps = 10 # 每秒点击次数
self.hotkey = 'f1'
def calculate_wait(self):
"""计算需要等待的毫秒数"""
now = datetime.datetime.now()
target = datetime.datetime.combine(now.date(),
datetime.time(*map(int, self.target_time.split('.')[0].split(':')),
int(self.target_time.split('.')[1])))
if target < now:
target += datetime.timedelta(days=1)
wait_ms = (target - now).total_seconds() * 1000
return max(0, wait_ms)
def click_loop(self):
"""点击循环"""
interval = 1.0 / self.cps
while self.clicking:
pyautogui.click()
time.sleep(interval)
def start_timed_click(self):
if self.waiting or self.clicking:
return
self.waiting = True
print(f"等待到 {self.target_time} 开始点击...")
wait_ms = self.calculate_wait()
if wait_ms > 0:
threading.Timer(wait_ms / 1000.0, self.start_clicking).start()
def start_clicking(self):
self.waiting = False
self.clicking = True
print(f"开始点击!频率:{self.cps}次/秒")
self.click_thread = threading.Thread(target=self.click_loop)
self.click_thread.start()
def stop_clicking(self):
self.clicking = False
if self.click_thread:
self.click_thread.join(timeout=1)
print("点击已停止")
# GUI界面
def create_gui():
root = tk.Tk()
root.title("毫秒定时点击器")
root.geometry("400x300")
clicker = MilliClicker()
# 时间设置
ttk.Label(root, text="目标时间 (HH:MM:SS.mmm):").pack(pady=5)
time_entry = ttk.Entry(root)
time_entry.insert(0, clicker.target_time)
time_entry.pack()
# 频率设置
ttk.Label(root, text="点击频率 (次/秒):").pack(pady=5)
cps_var = tk.StringVar(value=str(clicker.cps))
cps_combo = ttk.Combobox(root, textvariable=cps_var,
values=[1, 5, 10, 20, 50, 100])
cps_combo.pack()
# 热键设置
ttk.Label(root, text="启动/停止热键:").pack(pady=5)
hotkey_var = tk.StringVar(value=clicker.hotkey)
hotkey_entry = ttk.Entry(root, textvariable=hotkey_var)
hotkey_entry.pack()
def start():
clicker.target_time = time_entry.get()
clicker.cps = int(cps_var.get())
clicker.hotkey = hotkey_var.get()
threading.Thread(target=clicker.start_timed_click).start()
def stop():
clicker.stop_clicking()
ttk.Button(root, text="开始定时", command=start).pack(pady=10)
ttk.Button(root, text="立即停止", command=stop).pack()
# 状态显示
status_label = ttk.Label(root, text="状态: 就绪")
status_label.pack(pady=10)
def update_status():
if clicker.clicking:
status_label.config(text=f"状态: 点击中 ({clicker.cps}次/秒)")
elif clicker.waiting:
status_label.config(text=f"状态: 等待 {clicker.target_time}")
else:
status_label.config(text="状态: 就绪")
root.after(100, update_status)
update_status()
root.mainloop()
if __name__ == "__main__":
create_gui() |