自动发消息程序

简介: 【7月更文挑战第7天】

我写了一个自动发送消息程序

# -*- coding: utf-8 -*-
import time
import threading
from pynput import mouse, keyboard
from tkinter import Tk, Label, Entry, Button

class AutoTyper:
    def __init__(self, root):
        self.root = root
        self.root.title("Auto Typer")
        self.root.geometry("300x150")

        self.message_label = Label(root, text="Message:")
        self.message_label.pack()
        self.message_entry = Entry(root)
        self.message_entry.pack()

        self.interval_label = Label(root, text="Interval (seconds):")
        self.interval_label.pack()
        self.interval_entry = Entry(root)
        self.interval_entry.pack()

        self.start_button = Button(root, text="Start", command=self.prepare_typing)
        self.start_button.pack()

        self.running = False
        self.listener = None
        self.ready_to_start = False

    def prepare_typing(self):
        self.message = self.message_entry.get()
        self.interval = float(self.interval_entry.get())

        if self.listener:
            self.listener.stop()

        self.listener = mouse.Listener(on_click=self.on_click, on_move=self.on_move)
        self.listener.start()
        self.ready_to_start = True

    def on_click(self, x, y, button, pressed):
        if button == mouse.Button.left and pressed:
            if self.ready_to_start and not self.running:
                self.mouse_position = (x, y)
                self.running = True
                self.ready_to_start = False
                threading.Thread(target=self.type_message).start()

    def on_move(self, x, y):
        if self.running:
            self.running = False

    def type_message(self):
        my_mouse = mouse.Controller()
        my_keyboard = keyboard.Controller()
        count = 0

        while self.running:
            my_keyboard.type(f'{self.message}')
            my_keyboard.press(keyboard.Key.enter)
            my_keyboard.release(keyboard.Key.enter)
            count += 1
            time.sleep(self.interval)

if __name__ == "__main__":
    root = Tk()
    app = AutoTyper(root)
    root.mainloop()

增加 ready_to_start 标志:

在 prepare_typing 方法中设置 self.ready_to_start = True 表示准备开始。
在 on_click 方法中,当 self.ready_to_start 为 True 并且 self.running 为 False 时,启动消息发送。
点击鼠标左键时启动消息发送:

仅当 self.ready_to_start 为 True 时记录鼠标位置并开始发送消息,发送消息后将 self.ready_to_start 设置为 False。
鼠标移动时停止消息发送:

保持现有逻辑,当检测到鼠标移动时,将 self.running 设置为 False。

目录
相关文章
|
8月前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
438 0
|
8月前
|
设计模式 小程序 API
小程序之页面通信&派发通知
小程序之页面通信&派发通知
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
|
小程序 开发工具 开发者
微信小程序订阅消息点了 “总保持以上选择、全部拒绝,不在询问” 无法再次弹出
微信小程序订阅消息点了 “总保持以上选择、全部拒绝,不在询问” 无法再次弹出
1486 0
|
消息中间件 存储 JavaScript
Electron开发自定义通知 & 多并发下接收消息处理
Electron 专门提供了 Notification 可以用来实现`系统通知`,但是如果想实现自定义(如自定义UI样式等)通知,Notification 则不能实现。 下面摘录了我在`系统通知`和如何实现`自定义通知`的思路,另外也阐述了`多并发下接收消息`方案实现。
672 0
|
消息中间件 负载均衡 Java
下单消息的发送和接收案例|学习笔记
快速学习下单消息的发送和接收案例
239 0
下单消息的发送和接收案例|学习笔记
|
消息中间件 Java RocketMQ
发送确认订单失败消息演示|学习笔记
快速学习发送确认订单失败消息
105 0
发送确认订单失败消息演示|学习笔记
|
消息中间件 RocketMQ 开发者
测试发送消息和接受消息|学习笔记
快速学习测试发送消息和接受消息
146 0
测试发送消息和接受消息|学习笔记
|
移动开发 网络协议 测试技术
服务器循环接收客户端消息|学习笔记
快速学习服务器循环接收客户端消息
服务器循环接收客户端消息|学习笔记