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

本博文以两种方式介绍如何自动化打开软件(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 - 记事本”,并返回该程序的句柄,如果没找到,则返回0

Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")

Delay 2000

// 获取记事本的编辑窗口句柄

HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)

Call Plugin.Window.Max(Hwnd)

Delay 2000

Call Plugin.Window.Min(Hwnd)

Delay 2000

Call Plugin.Window.Restore(Hwnd)

Delay 2000

Call Plugin.Window.SendString(HwndEx, "www.baidu.com")

Delay 2000

Call Plugin.Window.Close(Hwnd)

Delay 2000

Else //如果软件没有打开,那么则打开该软件

RunApp "F:\记事本.txt"

Delay 2000

Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")

Delay 2000

HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)

Call Plugin.Window.Max(Hwnd)

Delay 2000

Call Plugin.Window.Min(Hwnd)

Delay 2000

Call Plugin.Window.Restore(Hwnd)

Delay 2000

Call Plugin.Window.SendString(HwndEx, "www.baidu.com")

Delay 2000

Call Plugin.Window.Close(Hwnd)

Delay 2000

End If

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

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

按键精灵调用python文件_Python按键精灵自动化相关推荐

  1. php python-浅谈php调用python文件

    关于PHP调用Python数据传输问题 这是以前大学时做项目出现的问题,现在把它挪上来,希望给遇到问题的未来大佬给出一些小的思路,请大佬们不要大意的帮我改正,如果出现问题或者有更好的解决方法,希望大家 ...

  2. c++Error:c++调用python文件提示由于找不到python3.8.dll,无法继续运行。。。

    [写在前面] 今天在做C++调用python文件时发程序运行报错提示: "由于找不到python3.8.dll,无法继续运行..." [原因描述] 系统中缺少python3.8.d ...

  3. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)

    本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)​zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...

  4. C#调用python文件

    最近在工作中需要(呵呵)用C#调用python文件,所使用的工具是IronPython 由于对C#语言不熟悉,所以这篇文章里就不探讨C#语言相关问题. 准备工作 下载安装IronPython,地址:h ...

  5. MATLAB调用python文件以及调用.exe文件方法

    引言: 在编程的时候有这么一个需求,就是要用MATLAB去调用python文件以及调用python写好的功能函数. 配置环境: MATLAB 2017b: python 2.7x: 方法: 1.查看m ...

  6. Java:在Java中调用python文件执行

    目录 一.Java内置Jpython库(不推荐) 1.1 下载与使用 1.2 缺陷 二.使用Runtime.getRuntime()执行脚本⽂件 2.1 使用 2.2 缺陷 三.利用cmd调用pyth ...

  7. QT调用python文件

    QT调用python文件 基本步骤 1.将python文件要是使用的环境添加到环境变量中 2.新建一个QT项目 3.在.pro文件中加入需要的python库文件目录 右击项目名,然后单击"添 ...

  8. 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别

    家里有一台win7系统的电脑,平时可以用来玩玩游戏消磨时间.但是有时候有一些重复的操作实在是无趣,所以打算写个脚本,让其自动化执行. 最终的目标就是把游戏里一些常用的操作都集合到脚本中去,且无序随机执 ...

  9. C++调用Python文件,TensorFlow和PyTorch构建的深度学习模型,无法使用GPU的情况分析。

    C++调用Python深度学习模型,包含TensorFlow和PyTorch等构造的模型,然后使用GPU出现问题.包含C++调用Python函数,C++加载模型到GPU,GPU内存占用过大,计算完毕内 ...

  10. c调用python函数_python - Linux C调用Python 函数

    1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...

最新文章

  1. etcd 日志压缩_etcd集群备份和数据恢复以及优化运维
  2. ASP.NET学习笔记(9)--SqlDataReader和SqlDataSet的比较
  3. hive快还是mysql快_HBase相对Hive查询速度快的对比
  4. javaweb回顾第十二篇监听器
  5. VC++6绘制GIS地图不同类型的点
  6. java代码调用python_java 直接调用python脚本,并传递参数代码实例|chu
  7. React Portals与Error Boundaries
  8. html点导航栏换图片,jQuery点击导航栏选中更换样式的实现代码
  9. 安装linux可是c盘文件夹失败,硬盘安装linux失败,进不去以前的windows怎么处理?
  10. 输入课程信息的C语言代码,[源码和文档分享]基于C语言的课程信息管理系统
  11. 总结:xshell的一些使用技巧
  12. 智能优化算法:斑点鬣狗优化算法-附代码
  13. Firefox 和 Firefox Nightly 同步服务:切换国内和国际服务器的方法
  14. android inflate,Android inflate view的两种方式
  15. Platform 设备驱动:platform_get_drvdata 与 platform_set_drvdata
  16. python os.system()和os.popen()
  17. (二)弹性布局Flex
  18. ZB雕刻用鼠标和数位板的差别大不大?怎么买手绘板?ZB雕刻手绘是不是很重要?
  19. 【源码】具有“放大镜”功能的函数magnify
  20. 一键分享功能ShareSDK

热门文章

  1. matlab ss2ss,Zemax+DDE+toolbox+for+Matlab 该工具箱可实现matlab编程和zemax通信 - 下载 - 搜珍网...
  2. ESP8266开发——安信可IDE环境搭建
  3. 《认知天性》听后感及听书笔记
  4. 基于Arduino和Mixly(超声波+蜂鸣器)实现距离报警
  5. 松江区企业技术中心认定条件及奖励政策解读
  6. Lync客户端更新联系人通讯簿
  7. 115网盘播放html5,新版115网盘加强个人社交功能 支持Html5技术
  8. 单路电压表c语言编程,基于ADC0809和AT89S52单片机的数字电压表的设计
  9. 导线测量步骤c语言程序,基于excel表的附合导线计算程序.doc
  10. 基于Struts2的网上书城(仿当当网)系统设计与实现