如何创建一个自动化按键和鼠标点击工具

在日常计算机使用中,我们常常需要进行重复性的操作,例如定时按下某个键盘按键或模拟鼠标点击。这可能涉及到玩游戏、自动化测试、数据录入等各种场景。为了实现这些功能,你可以创建一个自动化按键和鼠标点击工具。本教程将介绍如何使用Python和一些库来创建这样的工具。

1. 开场故事

想象一下,你正在玩一个需要不断点击鼠标的游戏,或者你需要在浏览器上定期执行某项任务。每次都手动点击或按下键盘按键是多么繁琐和乏味!那么,有没有一种方法可以自动化这些操作,让计算机来代劳呢?答案是肯定的,本文将向你展示如何创建一个自动化按键和鼠标点击的工具,让你告别重复性操作的困扰。

2. 准备工作

在开始之前,我们需要准备一些工具和库。首先,你需要安装Python,如果你还没有安装,可以从官方网站下载并安装。接下来,我们将使用以下库:

  • PyQt5:用于创建图形用户界面。
  • pynput:用于监听键盘和鼠标事件。
  • pygetwindow:用于获取当前活动窗口的信息。
  • pyautogui:用于模拟键盘按键和鼠标点击事件。

你可以使用以下命令安装这些库:

pip install PyQt5 pynput pygetwindow pyautogui

3. 创建图形用户界面

首先,我们将创建一个图形用户界面(GUI),以便用户可以轻松地控制自动化工具。我们将使用PyQt5库来构建GUI。以下是一个示例GUI的代码:

from PyQt5 import QtWidgets, uic
from PyQt5.QtGui import QPainter, QColor, QCursor
from PyQt5.QtCore import Qt, QRectF
from pynput.mouse import Button, Controller
import pyautogui
import threading
import time
import os

# ... 其他代码 ...

class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi(ui_path, self)

        # ... 创建GUI元素 ...

        self.show()

# ... 其他代码 ...

在这个GUI中,我们可以添加按键、设置时间间隔、监控按键状态等功能。

4. 监听键盘和鼠标事件

接下来,我们将创建一个用于监听键盘和鼠标事件的类。我们使用pynput库来实现这一功能。以下是一个示例代码片段:

from pynput import keyboard, mouse
import pygetwindow as gw

class Controller:
    def __init__(self):
        self.mouse_controller = mouse.Controller()
        self.mouse_pressed = False
        self.keyboard_stop_flag = True
        self.mouse_auto_stop_flag = True

    def on_press(self, key):
        try:
            # 检查游戏是否运行并且是当前活动窗口
            # game_windows = gw.getWindowsWithTitle(self.game_title)
            # if game_windows and gw.getActiveWindow() in game_windows:
            if key == keyboard.Key.f1:
                if self.keyboard_stop_flag:
                    self.keyboard_stop_flag = False
                    window.statusButton.setChecked(True)
                    self.start_keyboard_press_key()
                else:
                    self.keyboard_stop_flag = True
                    window.statusButton.setChecked(False)
            elif key == keyboard.Key.f2:
                # 鼠标连点
                if self.mouse_auto_stop_flag:
                    self.mouse_auto_stop_flag = False
                    window.mouseStatusButton.setChecked(True)
                    self.start_mouse_auto_click_key(self.MOUSE_STATUS_CLICK)
                else:
                    self.mouse_auto_stop_flag = True
                    window.mouseStatusButton.setChecked(False)
            elif key == keyboard.Key.f3:
                # 鼠标长按
                if self.mouse_auto_stop_flag:
                    self.mouse_auto_stop_flag = False
                    window.mouseStatusButton.setChecked(True)
                    self.start_mouse_auto_click_key(self.MOUSE_STATUS_PRESS)
                else:
                    self.mouse_auto_stop_flag = True
                    window.mouseStatusButton.setChecked(False)
            elif key == keyboard.Key.f4:
                # 按键映射
                pass
            elif key == keyboard.Key.f12:
                mouse_pos = QCursor.pos()
                global mouseX, mouseY
                mouseX = mouse_pos.x()
                mouseY = mouse_pos.y()
                window.xPos.setText(str(mouseX))
                window.yPos.setText(str(mouseY))
            else:
                print(f"{key} pressed")
        except Exception as e:
            import traceback
            traceback.print_exc()

    # ... 其他代码 ...

在这个类中,我们定义了一个Controller类,用于监听键盘和鼠标事件。根据按键的不同,我们可以执行不同的操作,例如启动键盘按键模拟、鼠标点击等。

5. 创建自动化操作

现在,我们可以创建自动化的操作,例如模拟键盘按键和鼠标点击。以下是示例代码:

class Controller:
    # ... 其他代码 ...

    def start_keyboard_press_key(self):
        for key, interval in key_time_dict.items():
            if key in pyautogui.KEYBOARD_KEYS:
                print("启动线程, 按键: ", key, " 间隔: ", interval)
                t = threading.Thread(target=self.press_key, args=(key, interval))
                t.daemon = True
                t.start()
            else:
                print(f"Key: {key} is not a valid key")

    def press_key(self, key, interval):
        print("按键: ", key, " 间隔: ", interval)
        while True:
            if self.keyboard_stop_flag:
                break
            pyautogui.press(key)
            time.sleep(interval)

    def start_mouse_auto_click_key(self, status):
        print("启动鼠标自动点击线程... ")
        if status == self.MOUSE_STATUS_CLICK:
            print(f"鼠标自动点击... delay:{window.mouseDelay.value()}")
            delay = window.mouseDelay

.value()
            t = threading.Thread(target=self.mouse_click, args=(delay,))
            t.daemon = True
            t.start()
        elif status == self.MOUSE_STATUS_PRESS:
            print("鼠标长按... ")
            mouseC = mouse.Controller()
            pyautogui.mouseDown()
            t = threading.Thread(target=self.mouse_press)
            t.daemon = True
            t.start()

    def mouse_click(self, interval):
        print("鼠标自动点击, 间隔: ", interval)
        while True:
            if self.mouse_auto_stop_flag:
                break
            # 获取鼠标当前位置
            print("指定的坐标... {}, {}".format(mouseX, mouseY))
            if mouseX == 0 and mouseY == 0:
                mouseXx, mouseYy = pyautogui.position()
            else:
                mouseXx = mouseX
                mouseYy = mouseY
            pyautogui.click(int(mouseXx), int(mouseYy))
            time.sleep(interval)

    def mouse_press(self):
        print("开启鼠标长按... ")
        while True:
            if self.mouse_auto_stop_flag:
                # 释放鼠标左键并退出循环
                pyautogui.mouseUp()
                print("鼠标长按结束")
                break
            print("鼠标长按中... ")
            time.sleep(0.3)

这个部分的代码用于启动键盘按键模拟和鼠标点击操作。根据用户的设置,它可以实现自动点击、长按和模拟按键等功能。

6. 启动监听器

最后,我们需要启动监听器来监控键盘和鼠标事件。我们在主程序中创建了一个start_listener函数,该函数启动了监听键盘和鼠标事件的线程。以下是示例代码:

def start_listener():
    game_title = "Your Game Title"  # 替换为你的游戏窗口标题
    global controller
    controller = Controller()
    # 启动一个守护线程
    print("启动线程监听...")
    daemon = threading.Thread(target=keyboard_listener, args=(controller,))
    daemon.daemon = True
    daemon.start()
    daemon = threading.Thread(target=mouse_listener, args=(controller,))
    daemon.daemon = True
    daemon.start()

def keyboard_listener(args):
    print("启动线程监听键盘...")
    controller = args
    with keyboard.Listener(
            on_press=controller.on_press,
            on_release=controller.on_release) as listener:
        listener.join()

def mouse_listener(args):
    print("启动线程监听鼠标...")
    controller = args
    with mouse.Listener(
            on_click=controller.on_mouse_press,
            on_release=controller.on_mouse_release) as listener:
        listener.join()

通过这些代码,我们可以启动监听器来监控键盘和鼠标事件,然后根据用户的设置执行相应的自动化操作。

7. 总结

通过创建一个自动化按键和鼠标点击工具,你可以轻松地执行重复性的操作,提高工作效率。这个工具可以用于各种应用场景,包括游戏、自动化测试、数据录入等。希望本教程对你有所帮助,让你更好地掌握自动化操作的技巧。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何创建一个自动化按键和鼠标点击工具

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月13日
下一篇 2023年9月13日

相关推荐

  • 打造神器:使用Python和Web3创建铭文批量铸造工具

    铭文在许多区块链游戏和应用中扮演着重要的角色。然而,如果你需要大量铸造铭文,手动完成这项任务将是一项繁重和耗时的工作。为了解决这个问题,我们可以使用Python和Web3库创建一个铭文批量铸造工具,以便更高效…

    2023年12月15日
    00
  • 用python实现简单的区块链

    区块链技术已经成为当今数字领域的热门话题,它的应用范围从加密货币到供应链管理等各个领域。了解区块链的基本概念是掌握这一新兴技术的第一步。在本教程中,我们将使用Python来创建一个简单的区块链,以帮助你理…

    2023年1月19日
    00
  • 揭秘交易情绪分析:你的成功交易利器

    你是否曾想过,在投资和交易的旅程中,能够洞察市场情绪的变化,从而更明智地做出决策?交易情绪分析正是这个领域的一颗璀璨明珠,它利用自然语言处理和机器学习技术,帮助你解读市场的情感波动,无论是乐观、悲观…

    2023年9月27日
    00
  • 解决Python集合计算问题的完美方案

    在Python中,有许多强大的第三方库和轮子可用于各种任务,但要找到一个能够满足您的需求的集合计算包可能会有些挑战。您需要一个能够处理不同类型的集合并保持输入顺序的解决方案。在本文中,我将为您介绍一种解决…

    2023年10月31日
    00
  • 如何使用Python多线程爬虫批量下载美女图片

    在互联网时代,美女图片一直是热门的网络内容之一。你是否曾经想过如何批量下载美女图片,以便欣赏或保存?本教程将教你如何使用Python编写一个多线程爬虫,快速、高效地从网站上下载美女图片。 开头小故事 在一个…

    2023年10月19日
    00
  • 教程:使用Python自动分类整理照片

    作为一个热爱摄影的摄影师或者只是一个热爱拍照的普通人,你的电脑可能积累了大量的照片。这些照片散落在各个文件夹中,有时候你可能会感到疑惑,不知道应该如何将它们有序地整理起来。手动分类和整理这些照片是一…

    2023年9月21日
    00
  • 准时到达目的地:列车最小时速计算详解

    在快节奏的现代生活中,时间管理变得尤为重要。想象一下,你每天上班需要乘坐多趟列车,每趟列车都有固定的行驶距离和发车时间。如何计算出一个最合理的时速,以确保你准时到达办公室呢?这不仅是一个关于时间和速…

    2023年11月25日
    00
  • Python HTTP 请求的 SSL 与代理问题:一次全面的解读

    在日常开发中,HTTP 请求作为信息交互的基础,其稳定性和正确性至关重要。然而,当李华试图用 Python 发送一个 HTTP 请求时,他遇到了一个棘手的问题:经常出现的 SSL 错误和超时问题。作为一个热衷于开发的工程师…

    2023年10月9日
    00
  • 优化签到流程:如何轻松自动签到并获取验证码

    你是否曾经厌倦了每天手动签到的重复工作?是否希望能够自动化这一过程,省下宝贵的时间?在这篇文章中,我将向你展示如何通过Python编写一个自动签到脚本,使签到过程更加便捷和高效。我们将使用Python的requests…

    2023年10月14日
    00
  • 在排序数组中查找元素的首尾位置:详细教程与实用技巧

    在程序设计的世界里,数据结构和算法是构建高效、优雅解决方案的基石。想象一下,你有一个已排序的数字数组和一个目标值,你的任务是在这个数组中找到该目标值的起始和结束位置。这看起来简单,但实际上,它蕴含了…

    2023年11月25日
    00