指定对象窗口标题例如某个QQ好友,或者游戏名称,喊话内容这个自定义,喊话间隔时间自己想要几秒发送一次,最后点击开始喊话就行了。 以下是python完整脚本。 import pyautogui import pygetwindow as gw import time import tkinter as tk from tkinter import messagebox, ttk from threading import Thread, Event import json import os class GameShouter: def __init__(self): self.root = tk.Tk() self.root.title("游戏喊话助手 v3.1") self.setup_ui() self.running = False self.stop_event = Event() self.config_file = "shout_config.json"
def setup_ui(self): main_frame = ttk.Frame(self.root, padding=10) main_frame.pack(fill=tk.BOTH, expand=True)
# 窗口标题输入 ttk.Label(main_frame, text="指定窗口标题:").grid(row=0, column=0, sticky=tk.W) self.window_entry = ttk.Entry(main_frame, width=40) self.window_entry.grid(row=0, column=1, pady=5)
# 喊话内容输入 ttk.Label(main_frame, text="喊话内容:").grid(row=1, column=0, sticky=tk.NW) self.content_entry = tk.Text(main_frame, height=5, width=30) self.content_entry.grid(row=1, column=1, pady=5)
# 间隔时间设置 ttk.Label(main_frame, text="间隔(秒):").grid(row=2, column=0, sticky=tk.W) self.interval_entry = ttk.Entry(main_frame, width=5) self.interval_entry.insert(0, "5") self.interval_entry.grid(row=2, column=1, sticky=tk.W)
# 控制按钮 btn_frame = ttk.Frame(main_frame) btn_frame.grid(row=3, columnspan=2, pady=10)
self.start_btn = ttk.Button(btn_frame, text="开始喊话", command=self.start) self.start_btn.pack(side=tk.LEFT, padx=5)
self.stop_btn = ttk.Button(btn_frame, text="停止", command=self.stop, state=tk.DISABLED) self.stop_btn.pack(side=tk.LEFT, padx=5)
# 状态显示 self.status_var = tk.StringVar(value="准备就绪") ttk.Label(main_frame, textvariable=self.status_var).grid(row=4, columnspan=2) def focus_window(self, title): try: wins = gw.getWindowsWithTitle(title) if wins: wins[0].activate() time.sleep(0.5) return True except Exception as e: self.status_var.set(f"窗口激活失败: {str(e)}") return False def send_text(self, text): try: if not self.focus_window(self.window_entry.get().strip()): return False
pyautogui.press('enter') time.sleep(0.3)
# 分段发送避免游戏接收不全 for chunk in [text[i:i+30] for i in range(0, len(text), 30)]: pyautogui.write(chunk, interval=0.08) time.sleep(0.05)
pyautogui.press('enter') return True except Exception as e: self.status_var.set(f"发送失败: {str(e)}") return False def shout_loop(self): interval = max(1, int(self.interval_entry.get())) while not self.stop_event.is_set(): content = self.content_entry.get("1.0", tk.END).strip() if not content: time.sleep(1) continue
if self.send_text(content): self.status_var.set(f"喊话发送成功 - 间隔{interval}s")
for _ in range(interval * 10): if self.stop_event.is_set(): break time.sleep(0.1) def start(self): if self.running: return
self.running = True self.stop_event.clear() self.start_btn.config(state=tk.DISABLED) self.stop_btn.config(state=tk.NORMAL)
Thread(target=self.shout_loop, daemon=True).start() self.status_var.set("喊话已启动...") def stop(self): self.running = False self.stop_event.set() self.start_btn.config(state=tk.NORMAL) self.stop_btn.config(state=tk.DISABLED) self.status_var.set("喊话已停止") def run(self): self.root.mainloop() if __name__ == "__main__": app = GameShouter() app.run() |