pyautoit 模拟操作windows软件

  • 安装
  • 使用
    • 运行软件
    • 操作
      • 窗口操作
    • 控件操作
    • 键盘操作
  • _项目所需,所封装的接口demo_

安装

pip install PyAutoIt
可参考:https://pypi.org/project/PyAutoIt/

使用

import autoit

运行软件

autoit.run(r"D:\Program Files\Notepad++\notepad++.exe")

操作

以下操作,多是以窗口标题、类名(classNameNN,用AutoIt可获取)为参数,PyAutoIt封装的句柄操作暂时没有理解透;
仅当前项目所需,所写不全不足之处,请大家一起完善。

窗口操作

等待title窗口活跃
win_wait_active(title, timeout=0, **kwargs)
等待title窗口出现
win_wait(title, timeout=0, **kwargs)
窗口最大化
autoit.win_set_state(title, flag=autoit.autoit.Properties.SW_MAXIMIZE)
关于窗口的其他操作,请参看源码,相对比较好理解

控件操作

点击控件
control_click(title, control, **kwargs)
control,一定要是带有instance的具体类名,如:WindowsForms10.EDIT.app.0.33c0d9d1, WindowsForms10.EDIT.app.0.33c0d9d是类名,1是instance

获取指定控件的文本
control_get_text(title, control, **kwargs)
强调文本 强调文本

键盘操作

向激活窗口发送模拟键击操作
send(send_text, mode=0)
mode= 0 (默认),按键序列中含有的特殊字符比如 + 和 ! 将被视为 SHIFT 和 ALT 键。
mode= 1,按键将按原样发送。

详情可参见:https://www.jb51.net/shouce/autoit/?tdsourcetag=s_pctim_aiomsg

项目所需,所封装的接口demo

import autoitclass MyPyAutoIt(object):@staticmethoddef open_exe(title, exe_path, timeout=30):'''打开软件并等待加载完成,窗口最大化:return:'''try:autoit.run(exe_path)autoit.win_wait_active(title, timeout)autoit.win_set_state(title, flag=autoit.autoit.Properties.SW_MAXIMIZE)except Exception as e:print(e)print('软件打开失败')exit(1)@staticmethoddef send_keys(title, control, text):'''指定输入框输入文本:param title: 主窗口标题:param control:  对应的控件的ClassnameNN:param text: 要输入的文本:return:'''autoit.control_click(title, control)time.sleep(0.1)# 复制pyperclip.copy(text)# ctrl + vautoit.send('{CTRLDOWN}')autoit.send('{v down}')autoit.send('{v up}')autoit.send('{CTRLUP}')@staticmethoddef control_click(title, control):'''点击该打开软件的某个控件:param title: 主窗口标题:param control: 对应的控件的ClassnameNN:return: 返回点击控件后的界面的text control对'''autoit.control_click(title, control)if title == 'xxxxxx':time.sleep(2)return MyPyAutoIt.get_dic(title)@staticmethoddef control_click_no_wait(title, control):'''点击该打开软件的某个控件:param title: 主窗口标题:param control: 对应的控件的ClassnameNN:return: 返回点击控件后的界面的text control对'''autoit.control_click(title, control)@staticmethoddef close_notice_window(title='提示', control=None, timeout=10):'''点击该打开软件的提示窗口的某个控件:param title: 提示窗口标题:param control: 对应的控件的ClassnameNN:param timeout: 超时时间:return:'''def close_inform():autoit.send('{TAB}')autoit.send('{TAB}')autoit.send('{SPACE}')autoit.send('{TAB}')autoit.send('{SPACE}')autoit.send('{TAB}')autoit.send('{TAB}')autoit.send('{SPACE}')autoit.send('{TAB}')autoit.send('{SPACE}')autoit.send('{SPACE}')autoit.send('{SPACE}')try:if title == '提示':autoit.win_wait_active(title, timeout)autoit.control_click(title, control)elif title == '告知书':autoit.win_wait(title, timeout)autoit.mouse_click(x=800, y=400)  # 点击告知书提示框使其被选中close_inform()autoit.send('{SPACE}')autoit.send('{SPACE}')except Exception as e:print('{}窗口关闭失败, msg : {}'.format(title, str(e)))@staticmethoddef ca_login(title='FormAccountPassword', psw_input_control=None, login_control=None, timeout=10):'''增值税 一般纳税人进入该表时要用CA密码验证:param title::param psw_input_control::param login_control::param timeout::return:'''autoit.win_wait_active(title, timeout)MyPyAutoIt.send_keys(title, psw_input_control, 'xxxxxx')MyPyAutoIt.control_click(title, login_control)@staticmethoddef get_username(title, username_list):'''获得账号名和对应的control组成的dict:param title::param username_list: 账号(公司全称)构成的list:return:dict, key为公司全称, value为对应的control'''dic = {}for key, value in MyPyAutoIt.get_dic(title).items():if key in username_list:dic[key] = valuereturn dic@staticmethoddef get_dic(title):''':param title::param control :要获取的控件的Class:return: 由text和对应的control组成的字典, key:text, value:control'''static_control = 'WindowsForms10.STATIC.app.0.33c0d9d'button_control = 'WindowsForms10.BUTTON.app.0.33c0d9d'edit_control = 'WindowsForms10.EDIT.app.0.33c0d9d'def get_d(control_str, n=500):d = {}for s in (control_str + str(i) for i in range(1, n)):try:key = autoit.control_get_text(title, s)if key == '':continueelif key in d.keys():if isinstance(d[key], list):d[key] = d[key].append(s)else:d[key] = [d[key], s]else:d[key] = sexcept autoit.autoit.AutoItError:continuereturn dreturn dict(get_d(static_control), **get_d(button_control), **get_d(edit_control))@staticmethoddef get_text_control(title):'''获取该界面中的text和其对应的control:param title: 窗口标题:return: 由text和对应的control组成的字典, key:text, value:control'''return MyPyAutoIt.get_dic(title)@staticmethoddef switch_account(title, username, username_list):'''切换账号:param title: 主窗口标题:param username_list: 公司全称列表:param username: 要切换的公司全称:return:'''dic = MyPyAutoIt.get_username(title, username_list)return MyPyAutoIt.control_click(title, dic[username])@staticmethoddef get_check_result(title, timeout=2):'''获取审核结果:param title::param timeout::return:返回审核结果'''autoit.win_wait_active(title, timeout)return autoit.win_get_text(title)@staticmethoddef exit_table(title, control='WindowsForms10.BUTTON.app.0.33c0d9d1', timeout=5):'''返回上一级,返回税表的上一级(提示要保存表格数据时,默认不保存):param title::param control::param timeout::return:'''MyPyAutoIt.control_click(title, control)try:autoit.win_wait_active('提示', timeout)MyPyAutoIt.control_click('提示', 'Button2')except autoit.autoit.AutoItError:pass@staticmethoddef get_text_by_control(title, control):'''根据给定的control 获取对应的text:param title::param control::return: ctrl对应的text'''return autoit.control_get_text(title, control)@staticmethoddef screen_capture(title, control, text=''):'''对相应的控件截图:param title::param control::param text::return:'''left, top, right, bottom = autoit.control_get_pos(title, control, text)img = ImageGrab.grab((left, top, right, bottom))img.show()

pyautoit 模拟操作windows软件相关推荐

  1. Just For Fun:在windows下模拟一个windows病毒软件(windows.h)

    在windows下编程可以通过include  windows.h来调用windows控件,使用起来也是非常的方便.简单介绍几个函数. 1.Sleep()进行倒计时 #include<stdio ...

  2. 推荐7款超良心的windows软件,每一个都是精品!

    安利7款使用已久的windows软件,每一个都是精品,可以解决很多问题,让电脑更好用. 1.格式工厂 格式工厂是一款办公利器,可以转换几乎所有类型多媒体格式,还有文件压缩.图片处理.视频文件修复.文件 ...

  3. android 查看设备 x86,有了它 x86安卓设备就能用Windows软件了

    原标题:有了它 x86安卓设备就能用Windows软件了 据外媒Phone Arena报道,如果你使用的是一部Android手机或平板,又必须要用到Windows软件,那么CrossOver和Wine ...

  4. 大学计算机操作题模拟,大学计算机一级模拟操作题1

    大学计算机一级模拟操作题1 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 全国计算机等级一级考试全国计算机等级一级考试 offic ...

  5. 信创操作系统--统信UOS桌面版(安装与卸载Windows软件)

    信创操作系统–统信UOS桌面版(安装与卸载Windows软件) 目录 前言 1 Wine介绍 2 Deepin-wine介绍 3 安装windows软件 3.1通过应用商店软件 3.2命令行界面界面安 ...

  6. windows软件-----办公效率提高

    https://leohxj.gitbooks.io/a-programmer-prepares/content/ windows软件 记录是给自己的回顾和总结,也是给别人的一种分享.所以我想说说使用 ...

  7. 模拟计算MS软件常见问题及解答(一)

    在做模拟计算时,科学指南针检测平台工作人员在与很多同学沟通中了解到,好多同学对此项目不太了解,针对此,科学指南针检测平台团队组织相关同事对公开课进行问题收集并整理,希望可以帮助到科研圈的伙伴们: 1. ...

  8. 全键盘操作Windows

    计算机机用户在使用计算机的时候,是用键盘多一点?还是用鼠标多一点?如果是专业打字员,应该会说他使用键盘多一点,除此之外,多数人都会告诉你,他已经离不开鼠标了,没有鼠标,就不会操作电脑.   如果某一天 ...

  9. CrossOver软件2022可以使苹果MAC电脑运行Windows软件应用

    面对安装双系统时的繁琐步骤,以及虚拟机软件那庞大的体积,CrossOver的出现,让一切都变得简单起来. CrossOver自带的一系列的Windows应用,涵盖游戏软件.办公软件.设计软件等多个种类 ...

最新文章

  1. 李飞飞计算机视觉经典课程上线,今年都有哪些新内容?
  2. 推荐一位玩自动化的 Python 爱好者
  3. mybatis报错解决办法 :Result Maps collection does not contain value for java.lang.String
  4. 从头编写 asp.net core 2.0 web api 基础框架 (2)
  5. 新玩法来了,web前端教程公众号推出《每日一题》
  6. 36 小时,程序员可以开发出什么?
  7. Python ConfigParser
  8. 反病毒软件技术简析与探索(2009年5月18日)
  9. C#编程,byte 与 int 相互转换
  10. 全球ATV DTV制式的分布
  11. mysql数据库有dbo吗_拒绝了对对象 '表名' (数据库 '数据库名',架构 'dbo')的 SELECT 权限...
  12. MI(mutal information)and Entropy
  13. 青苹果linux版本客户端,青苹果影院新版本
  14. win10的linux内核版本,微软决定在Windows10中发布一个完整的Linux内核
  15. 月中工作总结_在全职工作的9个月中,我是如何从新手转到软件工程师的
  16. 【vue3】ref获取v-for循环渲染的元素
  17. 电脑关机后电源灯还亮
  18. 基于微信小程序的校园信息共享平台 毕业设计-附源码211615
  19. MySQL索引的详细分析和数据结构
  20. SECS/GEM通信协议学习之报文

热门文章

  1. 中文的SqlHelper.cs类
  2. 问题解答:云电脑要用加速器吗
  3. [实用软件推荐] GIF截图软件 ScreenToGif
  4. Sql文件导入数据库-保姆级教程
  5. 【链块观点01期】当区块链的风刮到教育行业,哪些变革是注定要发生的?
  6. 空间统计之八:平均中心和中位数中心
  7. 小苏java学习之路
  8. 谷歌浏览器查看token
  9. spring-profile详解
  10. 《编译原理》-3.上下文无关文法及分析