一、自己封装的一些使用到的autoit库

import autoit

class MouseControl(object):
'''
AutoIt鼠标相关操作
'''
def __init__(self):
'''
Constructor
''' def click(self, title, text, x, y, button="main", clicks=1):
'''
:description 执行鼠标点击操作
'''
pos = autoit.win_get_pos(title, text=text)
autoit.mouse_click(button, x + pos[0], y + pos[1], clicks=clicks) def move(self, title, text, x, y):
'''
:description 移动鼠标指针
'''
pos = autoit.win_get_pos(title, text=text)
autoit.mouse_move(x + pos[0], y + pos[1]) def drag(self, title, text, x1, y1, x2, y2):
'''
:description 执行鼠标拖拽操作
'''
pos = autoit.win_get_pos(title, text=text)
autoit.mouse_click_drag(x1 + pos[0], y1 + pos[1], x2 + pos[0], y2 + pos[1]) def wheel(self, direction="up"):
'''
:description 产生向上或向下滚动鼠标滚轮事件.仅支持NT/2000/XP及更高.
'''
autoit.mouse_wheel(direction) mouseControl.py
import autoit

class ProcessControl(object):
'''
AutoIt进程相关操作
''' def __init__(self, processName):
'''
Constructor
'''
self.processName = processName def close(self):
'''
:description 终止某个进程
:return 1:成功; 0:失败.
'''
return autoit.process_close(self.processName) def exists(self):
'''
:description 检查指定进程是否存在
:return PID:成功; 0:进程不存在.
'''
return autoit.process_exists(self.processName) processControl
import autoit

class WinControl(object):
'''
AutoIt窗口相关操作
''' def __init__(self, title, text=''):
'''
Constructor
'''
self.title = title
self.text = text def activate(self):
'''
:description 激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
:return PID:窗口存在; 0:窗口不存在.
'''
return autoit.win_activate(self.title, text=self.text) def close(self):
'''
:description 关闭指定窗口.
:return 1:成功; 0:窗口不存在.
'''
return autoit.win_close(self.title, text=self.text) def exists(self):
'''
:description 检查指定的窗口是否存在.
:return 1:窗口存在; 0:窗口不存在.
'''
return autoit.win_exists(self.title, text=self.text) def getPos(self):
'''
:description 获取指定窗口的坐标位置和大小等属性.
:return Returns left, top, right, bottom (x1,y1,x2,y2)
'''
return autoit.win_get_pos(self.title, text=self.text) def getProcess(self):
'''
:description 获取指定窗口关联的进程ID(PID).
:return PID:成功, -1:失败.
'''
return autoit.win_get_process(self.title, text=self.text) def getText(self, buf_size=256):
'''
:description 获取指定窗口中的文本.
:return 指定窗口里包含的文本:成功; 0:失败(没有匹配的窗口).
'''
return autoit.win_get_text(self.title, buf_size, text=self.text) def kill(self):
'''
:description 强行关闭指定窗口.
:return 1:无论成功失败.
'''
return autoit.win_kill(self.title, text=self.text) def move(self, x, y, width, height):
'''
:description 移动指定的窗口或调整窗口的大小.
:return PID:成功, 0:失败(窗口不存在).
'''
return autoit.win_move(self.title, x, y, width, height, text=self.text) def setState(self, flag):
'''
:description 显示,隐藏,最小化,最大化或还原一个窗口.
:param flag: The "show" flag of the executed program:
= 显示
= 最小化/隐藏
= 最大化
= 还原
:return 1:成功, 0:失败(窗口不存在).
'''
return autoit.win_set_state(self.title, flag, text=self.text) def wait(self, timeout=5):
'''
:description 暂停脚本的执行直至指定窗口存在(出现)为止.
timeout 单位为秒.
:return PID:成功, 0:失败(超时).
'''
return autoit.win_wait(self.title, timeout, text=self.text) def waitActive(self, timeout=5):
'''
:description 暂停脚本的执行直至指定窗口被激活(成为活动状态)为止.
timeout 单位为秒.
:return PID:成功, 0:失败(超时).
'''
return autoit.win_wait_active(self.title, timeout, text=self.text) def waitClose(self, timeout=5):
'''
:description 暂停脚本的执行直至所指定窗口不再存在为止.
timeout 单位为秒.
:return 1:成功, 0:失败(超时).
'''
return autoit.win_wait_close(self.title, timeout, text=self.text) def waitNotActive(self, timeout=5):
'''
:description 暂停脚本的执行直至指定窗口不是激活状态为止.
timeout 单位为秒.
:return 1:成功, 0:失败(超时).
'''
return autoit.win_wait_not_active(self.title, timeout, text=self.text) def controlClick(self, control, button="main", clicks=1):
'''
:description 向指定控件发送鼠标点击命令.
'''
autoit.control_click(self.title, control, text=self.text, button=button, clicks=clicks) def controlCommand(self, control, command, extra="", buf_size=256):
'''
:description 向指定控件发送命令.
:param command, extra: :return
"IsVisible", "" 1:可见; 0:不可见
"IsEnabled", "" 1:可用; 0:禁用
"ShowDropDown", "" 弹出/下拉 组合框(ComboBox)的列表.
"HideDropDown", "" 收回/隐藏 组合框(ComboBox)的列表.
"AddString", "string" 在 ListBox 或 ComboBox 的编辑框后面附加指定字符串.
"DelString", 出现次序 删除在 ListBox 或 ComboBox 的编辑框中指定的字符串(从0开始).
"FindString", "string" 返回在 ListBox 或 ComboBox 的编辑框中与指定字符串匹配项目的出现次序(从0开始).
"SetCurrentSelection", 出现次序 通过指定出现次序(从0开始)把 ListBox 或 ComboBox 的当前选择项设为指定的项目.
"SelectString","string" 通过指定字符串把 ListBox 或 ComboBox 的当前选择项设为匹配字符串的项目.
"IsChecked", "" 若目标按钮(复选框/单选框)被选中则返回值为1,否则为0.
"Check", "" 使目标按钮(复选框/单选框)变为选中状态.
"UnCheck", "" 使目标按钮(复选框/单选框)变为非选中状态.
"GetCurrentLine", "" 返回在目标编辑框中插入符(caret,光标)的所在行号.
"GetCurrentCol", "" 返回在目标编辑框中插入符(caret,光标)的所在列号.
"GetCurrentSelection", "" 返回 ListBox 或 ComboBox 控件当前选中的项目名.
"GetLineCount", "" 返回目标编辑框中的总行数.
"GetLine", 行号 返回目标编辑框中指定行的文本内容.
"GetSelected", "" 返回目标编辑框中的(用户用鼠标或其它方式)选定的文本.
"EditPaste", 'string' 在目标编辑框中插入符(caret)所在位置后插入指定字符串.
"CurrentTab", "" 返回在 SysTabControl32 控件中当前显示的标签编号(从1开始).
"TabRight", "" 使 SysTabControl32 控件切换到(右边的)下一个标签.
"TabLeft", "" 使 SysTabControl32 控件切换到(左边的)下一个标签.
"SendCommandID", 命令 ID 模拟 WM_COMMAND 消息. 通常用于 ToolbarWindow32 控件 - 使用Au3Info的工具栏标签得到命令ID.
'''
return autoit.control_command(self.title, control, command, buf_size, text=self.text, extra=extra) def controlListView(self, control, command, extra1, extra2="", buf_size=256):
'''
:description 向指定的 ListView32 控件发送命令.
:param command, extra1, extra2: :return
"DeSelect", 从[, 到] 取消选定从"从"开始直到"到"的一个或多个项目.
"FindItem", "搜索字符串" [, 子项目] 返回与给定字符串匹配的项目的位置.若未找到指定字符串则返回值为 -1.
"GetItemCount" 返回列表中项目的数量.
"GetSelected" [, 选项] 返回当前选中项目的位置.若 选项=0(默认)则只返回选中的第一个项目;若 选项=1 则返回由竖线"|"作为分隔符的所有选中项目,例如:"0|3|4|10".若没有选中任何项目则返回一个空字符串"".
"GetSelectedCount" 返回选中项目的数量.
"GetSubItemCount" 返回子项目的数量.
"GetText", 项目, 子项目 返回指定项目/子项目的文本.
"IsSelected", 项目 若指定项目被选中则返回值为1,否则返回值为0.
"Select", 从[, 到] 选中一个或多个项目(请参考第一个命令).
"SelectAll" 选中所有项目.
"SelectClear" 取消所有项目的选中状态.
"SelectInvert" 切换当前的选中状态.
"ViewChange", "视图" 切换当前的视图.可用的视图包括"list"(列表),"details"(详细信息),"smallicons"(小图标),"largeicons"(大图标).
'''
return autoit.control_list_view(self.title, control, command, buf_size, text=self.text, extra1=extra1, extra2=extra2) def controlDisable(self, control):
'''
:description 禁用或使某控件变成灰色不可用状态.
:return 1:成功; 0:失败.
'''
return autoit.control_disable(self.title, control, text=self.text) def controlEnable(self, control):
'''
:description 使灰色按钮/控件变为"可用"状态.
:return 1:成功; 0:失败.
'''
return autoit.control_enable(self.title, control, text=self.text) def controlFocus(self, control):
'''
:description 设置输入焦点到指定窗口的某个控件上.
:return 1:成功; 0:失败.
'''
return autoit.control_focus(self.title, control, text=self.text) def controlGetText(self, control):
'''
:description 获取指定控件上的文本.
:return 文本内容:成功; 空:失败.
'''
return autoit.control_get_text(self.title, control, text=self.text) def controlSend(self, control, send_text, mode=0 ):
'''
:description 向指定的控件发送字符串.
:param mode: 0:按特殊字符含义发送(默认); 1:原样发送.
:return 1:成功; 0:失败(窗口/控件未找到).
'''
return autoit.control_send(self.title, control, send_text, mode, text=self.text) def controlSetText(self, control, control_text):
'''
:description 修改指定控件的文本.
:return 1:成功; 0:失败(窗口/控件未找到).
'''
return autoit.control_set_text(self.title, control, control_text, text=self.text) def controlTreeView(self, control, command, extra, buf_size=256):
'''
:description 发送一个命令到 TreeView32 控件.(子节点不好用*)
:param command, extra :return
"Check", "项目" 选中一个项目 (如果项目支持选中,这里指项目带有选择框).
"Collapse", "项目" 折叠一个项目节点,使它隐藏它的子项目.
"Exists", "项目" *都返回1* 如果项目存在返回 1,否则返回 0.
"Expand", "项目" 展开一个项目节点,使它显示它的子项目.
"GetItemCount", "项目" 返回所选项目的子项目数量.
"GetSelected" [, 使用索引] 返回当前所选项目的文本参考信息(如果使用索引设置为1将会返回所选项目索引位置).
"GetText", "项目" 返回项目文本.
"IsChecked" 返回项目选中状态. 1:被选中, 0:未被选中, -1:没要选择框.
"Select", "项目" 选择一个项目.
"Uncheck", "项目" 取消项目选中状态 (如果项目支持选中,这里指项目带有选择框).
'''
return autoit.control_tree_view(self.title, control, command, text=self.text, buf_size=buf_size, extra=extra) def statusbarGetText(self, part=1, buf_size=256):
'''
:description 获取标准状态栏控件的文本.
:return 文本内容:成功; 空字符串:失败(无法读取文本).
'''
return autoit.statusbar_get_text(self.title, self.text, part, buf_size) winControl

有些控件操作没有原生的autoit支持的好,比如对树控件的操作,经常会有问题,如果遇到出现问题只能再换autoit写au3文件直接运行了......

二、遇到的坑

1. 在等待窗口出现时,比较了try和while方法,觉得还是while方法比较方面和好用,尤其是你将等待出现的窗口可能有好几种不同的窗口时,用while+if就很方便。

def isclientupdate():
'''判断包是否需要升级'''
w_clientupdate = winControl.WinControl(title_update)
w_clientupdate_choice = winControl.WinControl(title_choice)
flag = True
count = 0
while flag:
if w_clientupdate.exists():
clientupdate()
flag = False
elif w_clientupdate_choice.exists():
w_clientupdate_choice.controlClick('Button2')
clientupdate()
flag = False
else:
time.sleep(1)
count += 1
if count == 5:
clientlogin()
flag = False

python+autoit用法的更多相关文章

  1. Python高级用法总结

    Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...

  2. python argparse用法总结

    转:python argparse用法总结 1. argparse介绍 argparse是python的一个命令行解析包,非常适合用来编写可读性非常好的程序. 2. 基本用法 prog.py是我在li ...

  3. Anaconda下载及安装及查看安装的Python库用法

    Anaconda下载及安装及查看安装的Python库用法 Anaconda 是一个用于科学计算的 Python 发行版,提供了包管理与环境管理的功能.Anaconda 利用 conda 来进行 pac ...

  4. python enumerate用法总结【转】

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  5. Python高级用法

    Python高级用法 三元表达式 x = 10 y = 20 print(x if x > y else y) x = 100 y = 20 print(x if x > y else y ...

  6. Python import用法以及与from...import的区别

    Python import用法以及与from...import的区别 在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相应的 ...

  7. 预备知识-python核心用法常用数据分析库(上)

    1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...

  8. python sorted用法

    python列表排序 python字典排序 sorted List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, cmp=None, key ...

  9. 转 python range 用法

    详细记录python的range()函数用法   使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的 ...

随机推荐

  1. [数论] hdu 5974 A Simple Math Problem (数论gcd)

    传送门 •题意 一直整数$a,b$,有 $\left\{\begin{matrix}x+y=a\\ LCM(x*y)=b \end{matrix}\right.$ 求$x,y$ •思路 解题重点:若$ ...

  2. 【37.74%】【codeforces 725D】Contest Balloons

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  4. C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127

    1.问题现象: 采用“运行期间动态链接”自己的 dll 文件,LoadLibrary() 成功获取 dll 模块句柄,但是 GetProcAddress() 返回 NULL. 2.问题分析: 调用 G ...

  5. LeetCode20_Valid Parentheses有效的括号(栈相关问题)

    题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...

  6. HDU1166 敌兵布阵 BZOJ1012 最大数[树状数组]

    一.前置知识-树状数组 树状数组(binary indexed tree)是一种简洁的代码量很小的数据结构,能够高效的处理前缀区间上的问题.在很多情况下能写树状数组解决的就不用码半天线段树了. 树状数 ...

  7. [转]SIMD、MMX、SSE、AVX、3D Now!、NEON

    转载来源<[整理]SIMD.MMX.SSE.AVX.3D Now!.neon> 本文摘取部分内容,详细请看原文. SIMD NEON是通用的SIMD(单指令多数据)引擎. 对于SISD,每 ...

  8. Visio图像应用

    图像插入: 直接搜索然后插入 CAD是工程绘图. CAD属性设置框 下面是图像编辑: 通过格式中的旋转进行调整 但是CAD格式的图没有格式 图片可以设置题注 图片层次的使用 CAD图片颜色的修改在 图 ...

  9. Linux忘记root密码后如何在grub界面中以单用户模式进入系统并重置密码的方法

    本文将介绍在Linux系统中忘记root用户密码的情况下,如何在gurb界面进入单用户模式并重置root用户密码.在单用户模式下,用户不需要输入任何密码即可进入系统并可以修改密码.实验步骤如下: 1. ...

  10. Java线程的生命周期与状态流转

    上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程. 这些状态的枚举值都定义在java.lang.Thread.State下 NEW:毫无疑问表示的是刚创建的线程,还没有开始 ...