自动发消息程序

简介: 【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。

目录
相关文章
|
6月前
|
设计模式 小程序 API
小程序之页面通信&派发通知
小程序之页面通信&派发通知
|
4月前
|
消息中间件 JavaScript Linux
消息队列 MQ操作报错合集之客户端在启动时遇到了连接错误,是什么原因
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java 测试技术
消息队列 MQ操作报错合集之设置了setKeepAliveInterval(1)但仍然出现客户端未连接,该怎么解决
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
|
5月前
|
消息中间件 Java 测试技术
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类
|
6月前
win32编程 -- 定时消息
win32编程 -- 定时消息
30 0
|
JavaScript
nodejs自动接收新邮件进行处理
通过imap 来接收邮箱新邮件,类似客户端系列,不过比较简单的,目前只有新邮件,后续也可以通过这个来做一个自己的邮件客户端。
nodejs自动接收新邮件进行处理
|
消息中间件 存储 JavaScript
Electron开发自定义通知 & 多并发下接收消息处理
Electron 专门提供了 Notification 可以用来实现`系统通知`,但是如果想实现自定义(如自定义UI样式等)通知,Notification 则不能实现。 下面摘录了我在`系统通知`和如何实现`自定义通知`的思路,另外也阐述了`多并发下接收消息`方案实现。
646 0
|
NoSQL Redis 开发者
数据类型-案例:微信接收消息顺序控制| 学习笔记
快速学习数据类型-案例:微信接收消息顺序控制
数据类型-案例:微信接收消息顺序控制| 学习笔记