GithubHelp home page GithubHelp logo

taojy123 / keymousego Goto Github PK

View Code? Open in Web Editor NEW
6.1K 60.0 924.0 63.41 MB

类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input

Home Page: http://taojy123.github.io/KeymouseGo

License: GNU General Public License v2.0

Python 99.87% QMake 0.13%
python keyboard mouse simulation automate

keymousego's Introduction

KeymouseGo


platform
license language stars

简体中文 | English

功能:记录用户的鼠标键盘操作,通过触发按钮自动执行之前记录的操作,可设定执行的次数,可以理解为 精简绿色版按键精灵

用途:在进行某些操作简单、单调重复的工作时,使用本软件就可以很省力了。自己只要做一遍,然后接下来就让电脑来做。

目录

安装

该软件通过 Python 语言编写,已打包为可执行文件,未安装 Python 的用户可直接下载 release 版本 ,直接点击 KeymouseGo 运行

源码打包可执行文件

  • Windows
1. 安装 Python3
2. pip install -r requirements-windows.txt
3. pip install pyinstaller
4. pyinstaller -F -w --add-data "./assets;assets" KeymouseGo.py
  • Linux或Mac
1. 安装 Python3
2. pip3 install -r requirements-universal.txt
3. pip3 install pyinstaller
4. pyinstaller -F -w --add-data "./assets:assets" KeymouseGo.py

使用方法

基本操作

桌面模式

1、点击 录制 按钮,开始录制。

2、在计算机上进行任意操作,如点击鼠标、键盘输入,这部分的动作会被记录下来。

3、点击 结束 按钮,结束录制。

4、点击 启动 按钮,计算机会重复执行一遍第2步中所录制的动作。

命令行模式

直接运行指定脚本:

> ./KeymouseGo scripts/0314_1452.txt

运行指定脚本3次:

> ./KeymouseGo scripts/0314_1452.txt -rt 3
> ./KeymouseGo scripts/0314_1452.txt --runtimes 3

以200%的速度运行指定脚本:

> ./KeymouseGo scripts/0314_1452.txt -sp 200
> ./KeymouseGo scripts/0314_1452.txt --speed 200

加载自定义扩展MyExtension运行指定脚本:

> ./KeymouseGo scripts/0314_1452.txt -m MyExtension
> ./KeymouseGo scripts/0314_1452.txt --module MyExtension

提示

1、可设置脚本重复执行的次数,如果为 0 即为无限循环。

2、默认启动热键为 F6,功能等同于 启动 按钮;默认终止热键为 F9,按下后将会停止正在运行的脚本。

3、录制时只记录鼠标点击动作和键盘动作,不记录鼠标移动轨迹。

4、每次录制结束后都会在 scripts 目前下生成一个新的脚本文件。

5、运行前可以在列表中选择一个需要执行的脚本。

6、scripts 下的脚本文件内容可以修改,修改时可参考如下所述 脚本格式说明

7、热键设置中的Middle指代鼠标中键,XButton指代鼠标侧键

8、由于程序速度受限,当输入的鼠标速度大于一定值时脚本将无法以预期的输入速度执行

部分系统环境中,可能出现无法录制完整的鼠标事件的情况,请以管理员身份/root身份运行此工具即可正常使用。

使用Mac的用户,需要确保程序在辅助功能白名单,如果使用打包的exec文件,则还需要确保终端也在辅助功能白名单。 如果app程序闪退,请尝试给予~/.qt_material目录下文件的写权限:

chmod -R 770 ~/.qt_material

脚本语法说明

演示屏幕分辨率为1920 * 1080

[
 [3000, "EM", "mouse right down", ["0.05208%", "0.1852%"]],    // 开始运行 `3000ms` 后,在屏幕相对坐标 `(0.05208, 0.1852)`即 `(100,200)` 处 `按下鼠标右键`;
 [50,   "EM", "mouse right up",   ["0.05208%", "0.1852%"]],    // 等待 `50ms` 后在相同位置 `抬起鼠标右键`;
 [1000, "EK", "key down",         [70, "F", 0]],                                   // 等待 `1000ms` 后 `按下f键`;
 [50,   "EK", "key up",           [70, "F", 0]],                                   // 等待 `50ms` 后 `抬起f键`;
 [100,  "EM", "mouse left down",  ["0.2604%", "0.4630%"]],      // 等待 `100ms` 后,在屏幕相对坐标 `(0.2604, 0.4630)`即 `(500, 500)` 处 `按下鼠标左键`;
 [100,  "EM", "mouse move",       ["0.2604%", "0.5556%"]],       // 等待 `100ms` 后,鼠标移动至相对坐标 `(0.2604, 0.5556)`即 `(500, 600)` 位置;
 [100,  "EM", "mouse left up",  ["0.3125%", "0.5556%"]],                   // 等待 `100ms` 后,在屏幕相对坐标 `(0.3125, 0.5556)`即 `(600, 600)` 处 `抬起鼠标左键`;
 [100,  "EX", "input",            "你好 world"],                                   // 等待 `100ms` 后,在当前位置输入 `你好 world` 文字。
]

脚本为 json 格式,每一行代表一次动作:

  • 每行的第 1 个元素表示时间间隔,指的是本次动作与上一次动作之间相隔的时间,单位为毫秒。
  • 每行的第 2 个元素表示鼠标动作或是键盘动作:EM 为鼠标,EK 为键盘,EX 为其他拓展动作。
  • 每行的第 3 个元素表示动作的类型:
    • mouse left down 为鼠标左键按下,mouse left up 为鼠标左键抬起,
    • mouse right down 为鼠标右键按下,mouse right up 为鼠标右键抬起,
    • mouse middle down 为鼠标中键按下, mouse middle up 为鼠标中键抬起,
    • mouse wheel up 为鼠标滚轮上滑, mouse wheel down 为鼠标滚轮下滑,
    • key down 为键盘按键按下,key up 为键盘按键抬起,
    • mouse move 为鼠标滑过,input 输入文字。
  • 每行的第 4 个元素表示具体的动作参数
    • 当为鼠标动作时,由两个子元素构成,分别为鼠标所在的屏幕位置的横纵坐标,
    • 当为键盘动作时,由三个子元素构成,分别是(按键编号, 按键名, 拓展标记),
    • 当为输入文字动作时,为要输入的文字内容。
  • 每行 // 后的部分为注释内容。
  • 修改时请严格遵守格式,否则可能导致脚本无法运行,建议修改前先备份一下。
  • 横纵坐标为[-1, -1]时,表示在鼠标当前所在位置执行操作。

自定义扩展

功能的使用详见wiki

关于作者

我是陶佳元,热爱代码,怀旧,在互联网上常用的 ID 有 taojy123 、tao.py。

我的个人站点 tslow.cn 整理并罗列了一些 个人项目小工具 合集。

你可以在 简书 浏览我最新发布的文章,还可以在 B站 观看我的技术分享和生活纪实。

我的邮箱: [email protected]


开源贡献者

如果您是开发爱好者,并对本项目感兴趣,欢迎参与项目的共同建设,您可以通过本项目的dev分支查看目前的进度,并且可以向本项目的dev分支提交 Pull request 来贡献代码。

在此,特别感谢积极贡献者:

感谢 JetBrains 免费提供开发工具


更新说明

暂时没法打包 x86 版本,32 位系统的同学请自行源码编译,或 下载v1.5老版本 使用

v5.1

  • 支持在Linux和Mac环境下运行
  • 支持在多屏环境下运行(仅Windows)
  • 修复程序在执行连点操作时有概率崩溃的问题
  • 修复文件选择器选择脚本后选项卡未更新的问题

v5.0

  • 初步实现自定义扩展功能
  • 可调整提示音音量
  • 增加脚本重命名/编辑子窗口
  • 添加英文文档
  • 增加简单日志窗口
  • 适应高分辨率(在高分辨率情况下放大窗口)

v4.1

  • 添加 命令行运行能力

v4.0

  • 使用 PySide2 重写 UI
  • 快捷键支持鼠标中键与侧键
  • 相关 issue 提出的功能需求实现
  • 4.0 代码基本由 Monomux 贡献,KeymouseGo 的整体品质有了较大提升。感谢付出!

v3.2.2

  • 修复了 input 事件无法输入内容的 bug

v3.2.1

  • 修复了中文注释无法解析的 bug

v3.2

  • 脚本文件中可使用 // 进行内容注释
  • 可录制鼠标轨迹(mouse move 事件),并可在软件中设置轨迹精度,填 0 即不录制轨迹。

v3.1

针对这个 issue(#39) 增加了两个功能点

  • 命令行启动模式中可以随时按下 F9 热键,来终止脚本运行
  • 模拟鼠标点击的脚本语句中可以设定坐标点为 [-1, -1], 用以表示在鼠标当前位置直接点击

v3.0

因为兼容 macOS 遇到的很大的阻碍,最终放弃跨平台,血泪史可参看这两个 issue: #24 moses-palmer/pynput#55

  • 改回使用 win32api 来模拟事件,只支持 windows 系统
  • 解决了 shift + 上下左右 的回放问题,见 #27
  • 增加了录制鼠标路径功能,需求来源 #33
  • 增加了文字输入功能,需求来源 #34
  • 因为使用了 win32api,不需要再手动设置屏幕缩放比例了
  • 录制脚本语法有部分改动,不向前兼容

v2.2

  • 优化了脚本格式,将动作时间间隔,放到每行脚本的首位,逻辑更加合理
  • 默认录制的第一个动作不加时间间隔,即按下启动按钮后立即执行第一个动作
  • 如果重复多次执行,可修改脚本中第一个动作的时间(单位毫秒)来决定每轮动作之间的相隔时间

v2.1

  • 增加了屏幕缩放配置,兼容了修改过屏幕缩放比例的 win10 系统
  • 优化代码,兼容 Python3

v2.0

  • 代码优化重构
  • 使用 pynput 实现动作捕捉和执行,不再需要安装 pywin32pyhook
  • 兼容 macOS (需要在隐私设置中允许程序控制电脑)
  • pynput 似乎不兼容 WinXP,暂时没法打包 x86 版本

v1.5

  • 修复自定义缩放后录制定位偏移 Bug

v1.4

  • 增加命令行运行方式

v1.3

  • Bug 修复

v1.2

  • UI 更新
  • 移除了 后台模式
  • 简化了录制脚本,增强了可读性
  • 脚本文件名优化,可录制多个脚本,避免误操作覆盖了辛辛苦苦录制的脚本
  • 可自定义 启动热键终止热键

keymousego's People

Contributors

dependabot[bot] avatar monomux avatar tadshi avatar taojy123 avatar zutjoe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

keymousego's Issues

关于点击事件的坐标问题

您好,首先感谢您的这个项目,对我帮助很大。
我在1920*1080分辨率的电脑上使用可执行文件时碰到一个问题,鼠标点击事件记录的像素坐标位置与实际操作时的位置有一定的误差,纵坐标误差大概有7到10左右,导致有些操作会中断,希望有朝一日能修改一下,不过可以通过修改本地txt文件的方式继续使用。
最后还是感谢您的项目!

键盘

在游戏界面只能模拟鼠标左右击,模拟键盘无效

录制和执行的时候,检查窗口信息

New feature request:

在录制的时候,记录上窗口信息(如窗口名字、程序名字)

播放的时候,如果当前窗口信息不对,就 wait,直到记录的窗口出现,恢复播放。

录制脚本后鼠标会位移

举个例子 ,录制的时候 excel 鼠标a1 移动到 a2 ,a3 . a4
然后 录制结束。点击启动鼠标会移动到下面三行左右位置。

NewId() is deprecated

大佬 wx.NewId() for _init_ctrls in range(19)其中的wx.NewId()始终报上面那个错误,我是不是那里少安装了。我用wx.Window.NewControlId()就不报上面那个错,但是程序运行不起。还请大佬讲解一二。

执行脚本大小有限制吗

大佬 我连续两次录屏,时间大概有一分钟左右,下面执行的操作,那个程序就不能动了,要在那里修改呢

一些文档方面的小建议

关于简介

作者您好,您在简介里写的

simulate mouse clicks and keyboard input

此处的simulate英语里一般用于代指“模拟”,simulate mouse clicks这句直观的理解是“并非真的点击,而是在某个虚拟容器里模拟现实中软件的点击”。
也许换成auto或者之类的词或许会好些。
automate mouse clicks或者mouse click assistant

关于note.md

也许和readme合并一起会更好些。因为一般使用者也许并不会详细查看源码文件夹里的md文件。

感谢您的付出

有没有可能加一个不同分辨率下,坐标转换功能呢?

说实话调试一个能够稳定些运行的脚本并不容易,但调试好的脚本,想在另一个分辨率不同的电脑上运行目前是不能的,要是有一个不同分辨率下坐标转换功能,确实会方便不少。就是不知道实现的难度有多大。

基于控件能否实现?

有个想法,这个程序是基于坐标操作(类似于按键精灵)的,能否实现基于控件操作(类似于安卓端的Auto.js)?

基于坐标只能够重复固定的动作,但基于控件可以实现查找控件,然后对控件进行操作(如click),这使得实现功能更具灵活性,功能也更强大。

不知道Windows是否能够实现。

能否增加启动录制和结束录制的快捷键?

没有快捷键,会录制不需要的内容,特别是在结束录制时候,我如果需要结束执行的时候将鼠标停留在特定位置,是无法实现的,因为此时需要将鼠标移动到结束录制处点击。。。。所以没法停在特定位置

发现小bug

首先感谢您的分享,以下为bug发生代码处
Frame1.py line 183 line184
self.choice_script.SetItems(self.scripts)
self.scripts = list(filter(lambda s: s.endswith('.txt'), self.scripts))
如此写法仍然将不以.txt结尾的文件显示到文本框中,导致作者调用filter的用意无法发挥作用

应将两句调换顺序

再次感谢您的分享

占用大量内存资源

你好,为什么我运行python脚本后,占用了大量的内存资源,我12G的内存被飙到百分之九十多,我一直都是保持在60%以下的

读取配置

你好,能不能加个保存配置得功能, 改了快捷键和次数,每次启动都要重新改。 还有开机自启

关于scroll的监听

您好,我借鉴您的思路自己做了一遍 增加了scroll的监听,但是运行后scroll的动静很小 根本就不能还原scroll的操作,请问这是为什么??

shift 无法被正确的重放

脚本:

[
 [1000,"EK","key down","shift"],
 [1000,"EK","key down","down"],
 [200,"EK","key up","down"],
 [1000,"EK","key up","shift"]
]

理论上运行时会向下选择一行

实际运行时只有光标向下移动了一行,说明 shift 没有生效

不能下载

不能下载啊,需要fanqiang吗?我看见好像是亚马逊的服务器

你好,能解释下操作本文内的含义吗?

额,大概我已经知道了,比如
['EK', 'key down', 256, 1, 72, 'H', 'WindowsForms10.EDIT.app.0.11c7a8c', 2888450]
1是按键间隔,72是H对应的ASCII码,唯一就是最后一个2888450,有点疑问?

特定的软件无法点击

当录制时遇到一些特定的软件无法执行。代码并不报错,也无异常,可继续执行。就是鼠标点击或者键盘按键效果无法展现,。可能是软件后台禁止了某些触发条件,防止进行录制点击等。无法点击效果多出现于游戏或者杀毒软件上,其中不同的系统效果可能还不一样,例如win7与win10的效果就有可能不一样。可以把键鼠点击效果更换为键鼠驱动试试,而是不用一些库或者系统I/O实现。

中止运行和无坐标运行

使用中发现两个“问题”:
1、直接通过软件界面运行脚本的话,可以用 F6 启动,F9 中止。但实际使用过程中,都是以命令行配合快捷键(其它软件)后台运行(非常酷,也非常爽)。可是脚本运行后,不知道如何中止……
2、脚本中,每一行的操作都带着坐标。不知道可不可以鼠标点击的动作,是跟随光标或焦点,就是光标移动到哪?或者焦点在哪个按钮或选择框?鼠标就在该处动作。
或者鼠标点击的动作,而不受坐标的限制?
最后实在感谢开发了如此实用、好用的软件。

建议增加结束录制快捷键

我在录制时,最后结束录制的按键动作也被一同录制下来了,在运行时它也会去操作一次结束按键

建议设置是否录制鼠标轨迹开关。

能否设置录制鼠标轨迹开关,感觉大多数鼠标轨迹都是可有可无的垃圾数据,且影响了录制文件的可读性。另外用//设置注释,从来没有成功过,只要加上//就运行失败,能否给点提示呢。

作者你好,我在使用该脚本的时候遇到了未录制上的问题

我的环境为 WIN10 1920*1080 125%缩放

目前使用脚本过程还是很开心 也非常感觉作者开发了一款这么精简而好用的“按键精灵”

在使用之前的版本没有遇到以下问题,这个问题是出现在V3.1版本

具体问题为:录制的过程中有时候会失效也就是说软件并没有在录制的过程中执行录制的功能
但如果我点击软件的窗口 会录制到操作 但是鼠标脱离窗口 窗口不在最前时 录制就失效了
这个也算是一个bug了
也希望作者可以修复一下

再次感谢作者的付出 谢谢。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.