按键精灵键盘脚本 Python模拟按键精灵
前言熟悉windows程序自动化的同学或是经常打游戏的同学应该知道“按键精灵”这款软件,它的主要功能是模拟鼠标键盘操作,对需要定时或不定时对某特定区域点击或发送某些命令时,这个软件十分有用,它中文化的编程模式虽然看起来有点怪异,但对于基本的循环判断都是有实现的,稍加修正也可以完成较复杂的任务。那么做为胶水语言的Python中有没有与这功能类似的第三方包呢?答案是肯定的,那就是pywinauto,从它的名字就可以看出,这是用python对windows进行自动化操作的工具包。注意:这个包只是在windows下使用!安装熟悉python第三方包安装的同学应该可以很容易用pip命令进行安装,即在命令行输入以下代码即可:
pip install pywinauto
pip命令会根据pywinauto的需求安装其相应依赖的包,比如pyWin32、comtypes、six、Pillow等,其中Pillow是可选的,在需要截图时会调用该包。基本用法在介绍用法之前,首先需要介绍一下pywinauto模块中两个名词:Dialog——指的是包含GUI元素比如按钮、编辑框等的一个窗口,它不一定是主窗口,可以是一个弹出式对话框;Control——指的是GUI元素,比如window、button、edit box等等。导入模块
from pywinauto.application import Application
import pywinauto.mouse as mouse
import pywinauto.keyboard as keyboard
启动一个程序启动软件可直接用Application的start()方法,比如我们来启动一下windows自带的记事本软件:
app = Application().start("c:/windows/system32/notepad.exe")
当运行上述代码时,我们可以立刻看到记事本软件被打开。访问对话框在打开记事本后,我们需要获取记事本的窗体,这时可以先来看一下,当前调用上述命令后启动的窗体有哪些:
app.windows()
输出:
[
1049854 >,
000001 CB287A0000:10000, 1573262>,
000001 CB287A0000:10000, 1049508>,
721494 >,
655836 >,
263078 >]
从打印的结果可以看出,伴随着记事本启动的还有几个输入法窗体,为了得到记事本窗体,需要调用以下代码:
dlg = app['无标题 - 记事本']
在这里为了得到记事本的窗体,必须要引用记事本当前的名字,这里的名字叫'无标题 - 记事本',因此我们在调用该窗体时,需要将该名字传递给app变量,当然如果文本文件的名字很长,我们可以用正则表达式来抓取:
dlg = app.window(title_re=".*记事本.*")
控件下一步就是要查明当前窗体有哪些可用的控件,这可用以下代码来打印:
dlg.print_control_identifiers()
从上述打印的信息,可以看出当前窗体的信息,注意每个窗体后面都有一些类似(L489, T504, R1734, B968)的信息,这是它的坐标位置(left, top, right, bottom)。
让我们通过程序调用记事本的菜单来将记事本的状态栏隐藏:
dlg.menu_select("查看 -> 状态栏")
如图所示,当上述代码运行后,记事本的状态栏就消失不见,当然再运行一次上述代码,其状态栏会重新显示。
我们下面演示一下调出记事本的替换窗口再将其取消,代码如下:
dlg.menu_select("编辑 -> 替换(R)")
app.window(title="替换")["取消"].click()
注意:上述代码调用时,要首先查找出弹出窗口,其次在弹出窗口中寻找取消按钮,再发送点击命令。下面我们再向记事本发送一些文本,比如在文本中写上:活着挺好。hello World!,代码如下: