快捷键映射鼠标自动点击软件

文章正文
发布时间:2025-10-16 07:09

本帖最后由 Rain_Personal 于 2025-8-9 10:00 编辑

功能:将鼠标点击某点的操作绑定到键盘快捷键上。在有些地方纯粹快捷键操作很方便。

自己根据PYQT6写的小软件,采用Nuitka编译,因此占用空间较小(未采用UPX压缩,目前添加UPX压缩后,软件打不开,因此未采用)。

录制鼠标当前位置的快捷键为F6,可自定义。执行的点击的快捷键为F3。所有设置会保存在config.ini文件中,因此一次录制,后期打开可随时使用。

image.png (19.24 KB, 下载次数: 0)

下载附件

软件窗口

2025-7-27 14:53 上传


下载地址:https://wwtq.lanzouo.com/iwXA131z5vyf 密码:dei8



[Python] 纯文本查看 复制代码

import sys import os from pynput import mouse, keyboard from PyQt6.QtWidgets import ( QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout ) import configparser CONFIG_FILE = "config.ini" def move_and_click(target_x, target_y, duration=0.01): m = mouse.Controller() original_pos = m.position m.position = (target_x, target_y) m.click(mouse.Button.left, 1) m.position = original_pos class AutoClicker(QWidget): def __init__(self): super().__init__() self.setWindowTitle("AutoClicker") self.target_x = 500 self.target_y = 300 # 读取配置 self.load_config() # 目标点输入 self.target_label = QLabel("目标点 (x, y):") self.target_x_edit = QLineEdit(str(self.target_x)) self.target_y_edit = QLineEdit(str(self.target_y)) # 快捷键设置 self.record_hotkey_label = QLabel("录制目标点快捷键:") self.record_hotkey_edit = QLineEdit(self.record_hotkey) self.set_record_hotkey_btn = QPushButton("设置") self.set_record_hotkey_btn.clicked.connect(self.set_record_hotkey) self.click_hotkey_label = QLabel("点击执行快捷键:") self.click_hotkey_edit = QLineEdit(self.click_hotkey) self.set_click_hotkey_btn = QPushButton("设置") self.set_click_hotkey_btn.clicked.connect(self.set_click_hotkey) # 保存设置按钮 self.save_btn = QPushButton("保存设置") self.save_btn.clicked.connect(self.save_config) # 布局 h1 = QHBoxLayout() h1.addWidget(self.target_label) h1.addWidget(self.target_x_edit) h1.addWidget(self.target_y_edit) h3 = QHBoxLayout() h3.addWidget(self.record_hotkey_label) h3.addWidget(self.record_hotkey_edit) h3.addWidget(self.set_record_hotkey_btn) h4 = QHBoxLayout() h4.addWidget(self.click_hotkey_label) h4.addWidget(self.click_hotkey_edit) h4.addWidget(self.set_click_hotkey_btn) v = QVBoxLayout() v.addLayout(h1) v.addLayout(h3) v.addLayout(h4) v.addWidget(self.save_btn) self.setLayout(v) self.listener = None self.mouse_controller = mouse.Controller() # 绑定初始热键 self.bind_hotkeys() def load_config(self): config = configparser.ConfigParser() if os.path.exists(CONFIG_FILE): config.read(CONFIG_FILE, encoding="utf-8") self.target_x = int(config.get("main", "target_x", fallback="500")) self.target_y = int(config.get("main", "target_y", fallback="300")) self.record_hotkey = config.get("main", "record_hotkey", fallback="F6") self.click_hotkey = config.get("main", "click_hotkey", fallback="F3") else: self.target_x = 500 self.target_y = 300 self.record_hotkey = "F6" self.click_hotkey = "F3" self.save_config() def save_config(self): config = configparser.ConfigParser() config["main"] = { "target_x": self.target_x_edit.text(), "target_y": self.target_y_edit.text(), "record_hotkey": self.record_hotkey_edit.text(), "click_hotkey": self.click_hotkey_edit.text() } with open(CONFIG_FILE, "w", encoding="utf-8") as f: config.write(f) def set_record_hotkey(self): self.record_hotkey = self.record_hotkey_edit.text().strip() self.bind_hotkeys() self.save_config() def set_click_hotkey(self): self.click_hotkey = self.click_hotkey_edit.text().strip() self.bind_hotkeys() self.save_config() def bind_hotkeys(self): # 停止旧监听 if self.listener: self.listener.stop() self.listener = None # 解析热键 hotkey_map = {} if self.record_hotkey: hotkey_map[self._format_hotkey(self.record_hotkey)] = self.record_current_pos if self.click_hotkey: hotkey_map[self._format_hotkey(self.click_hotkey)] = self.on_click_hotkey # 启动新监听 if hotkey_map: self.listener = keyboard.GlobalHotKeys(hotkey_map) self.listener.start() def _format_hotkey(self, keystr): # 支持单键如 F6,或组合键如 ctrl+alt+a key_map = { 'ctrl': '<ctrl>', 'alt': '<alt>', 'shift': '<shift>', 'win': '<cmd>', } keys = [] for k in keystr.split('+'): k = k.strip().lower() if k in key_map: keys.append(key_map[k]) elif k.startswith('f') and k[1:].isdigit(): keys.append(f'<{k}>') else: keys.append(k) return '+'.join(keys) def record_current_pos(self): pos = self.mouse_controller.position self.target_x_edit.setText(str(int(pos[0]))) self.target_y_edit.setText(str(int(pos[1]))) self.save_config() def on_click_hotkey(self): try: x = int(self.target_x_edit.text()) y = int(self.target_y_edit.text()) move_and_click(x, y) except Exception: pass # 可加日志 def closeEvent(self, event): if self.listener: self.listener.stop() event.accept() if __name__ == "__main__": app = QApplication(sys.argv) window = AutoClicker() window.show() sys.exit(app.exec())

 

 

image.png (19.24 KB, 下载次数: 1)

下载附件

2025-7-27 14:54 上传