最近在项目中需要进行软件的自动化操作。

本博文以两种方式介绍如何自动化打开软件(Windows下),对其进行最大化最小化关闭等操作。

Python操作:

第一次接触自动化。相对比较熟悉Python自然是希望通过Python来操作软件。一般来说,通过程序来操作软件需要获得该软件的句柄,然后通过该句柄给软件发消息来操作该软件。Python中你需要安装Pywin32模块,该模块提供了访问Windows API的扩展,利用该模块你可以很方便的进行相关软件的操作。

这里先介绍一篇博文,如何利用Python和win32减少体力活,这篇博文介绍了pywin32模块,同时,介绍了很多有用的操作,如如何获取菜单句柄,下拉栏句柄,如何发送消息等。有更多的需要可以学习这篇博文,我这里只介绍如何通过pywin32打开软件,最大化,最小化,关闭等基本的操作。

首先是如何打开软件。

第一种方式,也是最简单的方式,利用os模块。比如我想打开记事本程序,可以:

def runApp():os.system(u"C:\\Windows\\System32\\notepad.exe")

os.system(command)中的command即为要执行的命令,也可以附加运行参数。这种方式非常简单,但是它有个缺点,它是阻塞的,即程序运行到这里后要等执行的程序执行完成后才能继续向下运行(个人理解)。

第二种方式是使用win32api中的ShellExecute函数。

该函数是非阻塞的。同样是打开记事本程序,可以这样写:

def runApp():import win32api# 最后一个参数表示是窗口属性,0表示不显示,1表示正常显示,2表示最小化,3表示最大化res = win32api.ShellExecute(0, 'open', 'C:\\Windows\\System32\\notepad.exe', '', '', 3)

其他方式:还有使用win32process中的CreateProcess方法和使用ctypes等方式,我这里没有用到,继续学习可以看博文: Python调用(运行)外部程序。

接着,是获取软件的句柄。

打开软件后,对于窗口程序可以获取窗口句柄。句柄的获得对于后续操作至关重要。

比如我们打开了一个名叫233.txt的记事本程序,想获得它的句柄可以这样:

def findAppHandle():appName = u"233.txt - 记事本"hwnd = win32gui.FindWindow(None, appName)print hwnd

接着是通过句柄操作软件,给软件发消息:

比如想最大化软件,将软件窗口置于最前,关闭软件:

# 关闭软件
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
# 软件最大化
win32gui.PostMessage(hwnd, win32con.WM_SYSCOMMAND, win32con.SC_MAXIMIZE, 0)
# 将软件窗口置于最前
win32gui.SetForegroundWindow(hwnd)

这里面涉及到很多Windows的消息类型和参数,具体需要查阅MSDN。

按键精灵方式:

事实上,自动化软件在大部分情况下还有更方便的工具,那就是使用按键精灵。我这个项目所要自动化的软件中的很多的窗口句柄和操作很难通过程序来直接操作,于是,我又花了一点时间和同伴学了下按键精灵。

按键精灵是一款模拟鼠标键盘动作的软件。软件通过各种鼠标点定位,屏幕坐标或区域取色找色,键盘时间模拟,窗口句柄操作等等一系列强大的操作能够帮助实现各类软件自动化,游戏自动脚本等功能。而且精灵脚本可以进行编程制作,对于学过编程的人来说更容易(没学过也很简单)。

下面我提供一段代码,可以实现,精灵检测一个名叫记事本.txt的程序有没有打开,如果没有打开那么则打开F盘中的记事本.txt,并对该记事本.txt进行最大化,最小化,恢复窗口,向编辑窗口中写入一段话,关闭程序等操作。

// 搜索“记事本.txt - 记事本”,找到返回该程序句柄,否则返回空白
HwndEx = Plugin.Window.Search("记事本.txt - 记事本")
MyArray = Split(HwndEx, "|")
// 如果程序已经打开了
If UBound(MyArray)>=0 Then Delay 50// 按照窗口名查找“记事本.txt - 记事本”,并返回该程序的句柄,如果没找到,则返回0Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")Delay 2000// 获取记事本的编辑窗口句柄HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)Call Plugin.Window.Max(Hwnd)Delay 2000Call Plugin.Window.Min(Hwnd)Delay 2000Call Plugin.Window.Restore(Hwnd)Delay 2000Call Plugin.Window.SendString(HwndEx, "www.baidu.com")Delay 2000Call Plugin.Window.Close(Hwnd)Delay 2000
Else  //如果软件没有打开,那么则打开该软件RunApp "F:\记事本.txt"Delay 2000Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")Delay 2000HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)Call Plugin.Window.Max(Hwnd)Delay 2000Call Plugin.Window.Min(Hwnd)Delay 2000Call Plugin.Window.Restore(Hwnd)Delay 2000Call Plugin.Window.SendString(HwndEx, "www.baidu.com")Delay 2000Call Plugin.Window.Close(Hwnd)Delay 2000
End If

按键精灵的脚本可以导出为exe文件,可以直接供调用和运行。

实际操作的情况往往比较复杂,在我的项目里,我用了Python脚本来模拟和管理要自动化的软件的运行环境,调用按键精灵的exe文件来实现整个软件的自动化。

Python按键精灵自动化相关推荐

  1. Python按键精灵自动化_安装Python

    嘀嘀嘀!大家好,我是PY拓海. 前面和大家说了那么多,话不多说,我们开始吧! 要使用Python编程,我们需要在电脑上搭一个Python的编程环境,步骤非常简单,下面我给大家演示. 下载Python( ...

  2. Python按键精灵自动化_Python基础:了解Python与pycharm

    认识 Python 人生苦短,我用 Python -- Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  3. python 按键精灵 办公自动化 方便_按键精灵自动化办公插件

    1 懒人办公插件 在之前的院刊中,也分享过懒人办公插件.想必有不少童鞋都有使用过.那么,是什么原因让小编忍不住再次要分享这个插件呢?近期,懒人插件作者 lxj1985 再次更新了插件,更新之后的插件更 ...

  4. python 按键精灵 离线_(番外篇)Python操纵网盘客户端批量离线下载电影

    上回(Python实现电影排行榜自动网盘下载(4)Cookies免登录+抓包下载)说到,一段时间内能进行多少次离线下载还是受限于验证码的输入. 在此有两个解决方案, 见招拆招 通过GUI优化验证码输入 ...

  5. python 按键精灵脚本_[620]使用Python实现一个按键精灵

    按键精灵想必很多人都玩过,使用录制功能将鼠标和键盘的操作录制下来,录制好后就可以通过回放自动执行之前录制的操作,可以设置重复执行的次数,这样就可以将一些重复的劳动交给脚本自动化去完成.使用Python ...

  6. 脚本录制软件python 按键精灵 tc_键鼠录制工具(KeymouseGo)

    KeymouseGo是一款类似于按键精灵的简洁版鼠标键盘录制程序,由Python编写且全开源.该软件主要用在进行某些操作简单.单调重复的工作时,使用本软件就可以很省力了.自己只要做一遍,然后接下来就让 ...

  7. python 按键精灵_python中用ctypes模拟点击的实例讲解

    在小编学习python中的模拟点击之前,我们想要对某一项操作进行自动指令的重复,可以选择大家熟知的按键精灵.那么对比python的模拟点击,小编还是觉得python中使用更加方便.这样说不能让有些小伙 ...

  8. python+按键精灵实现百度指数数据爬取

    百度指数本身已经很好用了,但是如果进行二次整理,需要把原始数据采集下来就不是那么方便了.网页的请求只有一次, 需要的具体数据随鼠标的移动变化,所以,常规的requests请求网页,解析网页并不能满足需 ...

  9. python 按键精灵脚本_按键精灵的脚本 - 对于重复动作(含键盘鼠标)太好用了

    '搜索的视图大小. STD_LEFT = 20 STD_TOP = 100 STD_RIGHT = 620 STD_BOTTOM = 1000 Function DoClick LeftDown 1 ...

最新文章

  1. oracle通用分页语句rownum
  2. 鼠标移动区域局部放大
  3. cmd mysql uroot p不是内部或外部命令...
  4. java http的get,post请求
  5. android连接此设备时打开,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...
  6. mysql 备份脚本 linux,LINUX中MySQL如何按时备份脚本
  7. 中国特威兹勒行业市场供需与战略研究报告
  8. QT连接MySQL记录
  9. Dism++管理优化windows
  10. wincc控件包下载_Simatic HMI WinCC V7.4 SP1 组态软件下载
  11. 若依项目人员选择器实现
  12. 金仓数据库-java连接金仓数据库方法笔记
  13. 【OSX】MAC下能用的炒股软件
  14. tcp checksum 0xffff instead of 0x0000 see rfc 1624
  15. Jetson TX2 安装 D435i ROS驱动
  16. NLP_Python3——正则表达式
  17. 【RNN从入门到实战】GRU入门到实战——使用GRU预测股票。
  18. python素数,获取100以内的孪生素数
  19. 目标跟踪实战,车辆车距监测 yolov5
  20. dec在微型计算机中的意思,汇编语言中的DEC是什么意思?

热门文章

  1. linux内核源码 github,GitHub - groot2013/Linux-0.11code: 这是Linux0.11内核源代码
  2. 移动硬盘制作随身系统
  3. http状态码有哪些?代表什么意思?(查询手册而已)
  4. 荣耀路由器w831刷linux,华为荣耀WS831路由器设置的方法
  5. Android 客户端Socket 与 Java服务端ServerSocket
  6. 11 如何成为可转债的交易好手
  7. 辨别MagicKeyboard的真伪(序列号验证版)
  8. Python有参函数和无参函数实例
  9. 关于透明度混合blend
  10. 9年前,字节跳动第一个安卓工程师是这样工作的