目录
9.控件操作
click_input()
函数作用:模拟鼠标左键的点击
app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
#点击最大化按钮
win.child_window(title="最大化", control_type="Button").click_input()
right_click_input()
函数作用:模拟鼠标右键单击操作
app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
#右键窗口
win.right_click_input()
double_click_input()
函数作用:模拟鼠标双击操作
app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
menu = win['应用程序']
#双击菜单栏——达到窗口最大化目的
menu.double_click_input()
texts()
函数作用:用于获取窗口或控件中的所有文本内容,返回一个列表,其中每个元素是一个字符串,表示窗口或控件中的某个文本片段
app = Application(backend='uia').connect(process=2392)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
print(win.texts())

window_text()
函数作用:用于获取窗口或控件的主文本内容,通常是指窗口的标题或主要显示的文本。它返回一个字符串
app = Application(backend='uia').connect(process=2392)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
print(win.window_text())

get_properties()
函数作用:以字典形式返回控件的属性
capture_as_image()
函数作用:对窗口或控件进行截图,再通过save保存
win = app.window(title_re='.*Sublime Text.*')
#进行截图
pic=win.capture_as_image()
#进行保存,图片名为01.png
pic.save("01.png")
10.鼠标操作
在前面对控件操作的三个click函数中,允许通过指定 coords 参数来实现基于坐标的点击操作,如win.double_click_input(coords=(1043, 130)),但往往这种方法在实际操作时会出现偏差,导致无法精确的点击
因此pywinauto 提供了一个独立的 mouse 模块,专门用于模拟真实用户的鼠标事件
mouse 模块常见操作:

额外两个操作函数
rectangle() :获取元素对应坐标,返回矩形尺寸,具有top,left,right,bottom属性
mid_point() :获取元素中间位置坐标,返回类型为元组,元组中两个整数分别是X、Y轴的值
app=Application(backend="uia").connect(process=19652)
win=app.window(title_re=".*Sublime Text.*")
win.wait("exists")
# win.print_control_identifiers()
proc=win.child_window(title="应用程序", auto_id="MenuBar", control_type="MenuBar")
rect=proc.rectangle()
# print(rect)
#获取控件的中心坐标--手动计算,会有一定的误差
# width=rect.right-rect.left
# height=rect.bottom-rect.top
# print(f"{width}---{height}")
#
# width=math.floor(width/2)+rect.left
# height=math.floor(height/2)+rect.top
# mouse.move(coords=(width,height))
#通过mid_point直接得出控件的中心位置
# mid_point=rect.mid_point()
# mouse.move(coords=(mid_point.x,mid_point.y))
for i in proc.children():
point=i.rectangle().mid_point()
# #计算控件的中间位置
# width=rect.right-rect.left
# height=rect.bottom-rect.top
mouse.click(coords=(point.x,point.y))
time.sleep(1)
mouse.click(coords=(point.x,point.y))
time.sleep(1)
11.键盘操作
send_keys()
函数作用:键盘输入方法,可以直接将按键序列发送到当前具有焦点的窗口
而在实际的自动化场景中,我们通常需要针对特定的控件(如文本框、按钮等)进行精确的输入操作,而不是依赖于窗口的焦点状态,因此封装了下面的type_keys()
type_keys()
函数作用:是控件对象(例如 Edit 控件或 Button 控件)的专属方法,可以直接作用于指定的控件,确保输入内容精准无误。适合在复杂的用户界面中进行自动化操作
语法:
type_keys(
keys, # 要输入的键序列,可以是普通字符、特殊键或组合键
pause = None, #每次按键后的延迟时间(秒)
with_spaces = False, # 如果为 True,则会在输入的字符串中保留空格。
with_newlines = False, #如果为 True,则会在输入的字符串中保留换行符。
... )
app=Application(backend="uia").connect(process=19652)
#定位窗口
win=app.window(title_re=".*Sublime Text.*")
win.wait("visible")
#在subText中输入文本 keys,pause with_spaces默认为False不保留空格,with_newlines,默认不保留换行
win.type_keys(keys="123456",pause=1)
win.type_keys(keys="123 456",with_spaces=False)
win.type_keys(keys="123\n456",with_newlines=True)
按键

其余的为输入正常英文字母或标点字符即可
win.type_keys("hello{SPACE}world")
#虚拟键码-ctrl+s
win.type_keys("^s")
win.type_keys("^a")
win.type_keys("{BACKSPACE}")
win.type_keys("{VK_DELETE}")
#合并使用
win.type_keys("^a{VK_DELETE}")
#指定重复次数
#shift(+) 输出括号----{SAPCE 5}表示按下5次space
win.type_keys("+9hello{SPACE 5}world+0")
win.type_keys("1{+}2=3")
#使用 {} 包裹特殊字符(如 {+} , {%} , {^} )以避免被识别为修饰符
win.type_keys("1{+}2=3")
12.菜单控件操作
items()
函数作用:返回对话框的菜单项,如果没有菜单项,则返回空列表
与children()方法比较:
1.items()底层调用的是children()方法
2.children()可以获取所有类型控件的子控件
3.items()只能获取菜单类型控件的菜单项
item_by_index()
函数作用:
查找索引指定的菜单项,其中参数填写的为下标,从0开始,也仅次于菜单控件查找菜单项
app = Application(backend='uia').connect(process=38544)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
menu = win['应用程序']
print(menu.items())
menu.item_by_index(0)
item_by_path()
函数作用:用户查找路径指定的菜单项
函数原型:
item_by_path(path, exact=False)
path :用于指定要选择的菜单项路径。
exact :设置为 True,则要求菜单项名称与路径中的名称完全匹配;如果为 False,则允许模糊匹配 路径可以是“MenuItem-> MenuItem-> MenuItem ...”形式的字符串,其中每个MenuItem是菜单该级别的项目文本。
menu_bar = win.child_window(title="应用程序", auto_id="MenuBar",control_type="MenuBar")
#选择保存文件File->Save ----不区分大小写
save=menu_bar.item_by_path(path="File->Save")
point=save.rectangle().mid_point()
mouse.move(coords=(point.x, point.y))
#选择File->Reopen With Encoding --精确匹配,区分大小写
reopen=menu_bar.item_by_path(path="File -> Reopen with Encoding",exact=True)
point=reopen.rectangle().mid_point()
mouse.move(coords=(point.x, point.y))
多层菜单选项的定位

可以采用定位一个,点击下,调起新窗口,然后再定位Open Recent,再定位Clear Items的方式,进行由外往里的进行定位
win = app.window(title_re=".*Sublime Text.*")
win.wait("visible")
menu_bar = win.child_window(title="应用程序", auto_id="MenuBar",control_type="MenuBar")
#定位File菜单,并点击
file_menu = win.child_window(title="File",control_type="MenuItem")
#调起Open Recent窗口
menu_bar.item_by_path("File->Open Recent").click_input()
#定位到Open Recent窗口
openRecent_win = file_menu.child_window(title="Open Recent",control_type="Window")
openRecent_win.wait("visible")
#定位Open Recent窗口Clear Items菜单项
clear_items = openRecent_win.child_window(title="Clear Items", auto_id="31",
control_type="MenuItem")
point = clear_items.rectangle().mid_point()
mouse.move(coords=(point.x,point.y+30))
time.sleep(3)
mouse.click(coords=(point.x,point.y+30))
menu_select()
函数作用:用户查找路径指定的菜单项
函数原型:
menu_select(path, exact=False)
path :用于指定要选择的菜单项路径。
exact :设置为 True,则要求菜单项名称与路径中的名称完全匹配;如果为 False,则允许模糊匹配
menu_select在查找到菜单项后还会进行选择(点击操作)
13.列表控件的操作
get_items()
函数作用:获取列表视图中的所有项目
item_count()
函数作用:列表视图中的项数
get_item()
函数作用:返回列表视图中的指定项目,参数为row
app = Application(backend='uia').connect(process=9628)
win = app.window(title_re='.*文件资源管理器')
win.wait('visible')
data_list = win.child_window(auto_id="HomeListView", control_type="List")
#打印列表项
print("items:",data_list.get_items())
#打印列表项数量
print("items:",data_list.item_count())
#获取列表中第一项
print("items:",data_list.get_item(row=0))
14.访问系统控制区域

这个是系统通知区域,对于这个区域的访问,可以通过启动Explorer.exe这个程序
app=Application(backend="uia").connect(path="explorer")
app["任务栏"].print_control_identifiers()
507

被折叠的 条评论
为什么被折叠?



