文档:https://pywinauto.readthedocs.io/en/latest/index.html
资料:https://www.cnblogs.com/programer-xinmu78/p/10661257.html
# -*- coding: utf-8 -*-
'''
深入:
一、菜单选项
二、弹出菜单选项点击
继续持续深入pywin32比较好
'''
import pywinauto
from pywinauto.application import Application
# =============================================================================
# #自建函数 显示所有菜单及子菜单
# =============================================================================
def showMenus(dlg):
for x in dlg.menu_items(): #显示当前窗口菜单项
print(x['text'])
for y in x['menu_items']['menu_items']: #从菜单项里遍历紫菜单项
print(' '+ y['text'])
# =============================================================================
# #示例:启动无标题记事本
# =============================================================================
#app=Application()
#app.start('Notepad.exe')
#app.Notepad.draw_outline(colour='red') #当前dlg周围划线,单独输出可直观显示
#app.Notepad.print_control_identifiers(depth=100,filename='a.txt') #当前dlg中所有控件输出:类名、标题名、位置等
#app.Notepad.type_keys('SKJAKJFSDF')
#
#dlg=app['无标题 - 记事本']
#showMenus(dlg) #自建函数输出窗口所有菜单及子菜单
#
#dlg.WindowText() #返回对话框的标题文本
#
#
#app['无标题 - 记事本'].menu_select('编辑->替换(&R)...') #当前dlg菜单检索
##app['替换'].print_control_identifiers() #当前dlg所有控件输出
#app['替换']['取消'].click() #app[dlg][ctl].click() dlg和ctl都可以通过类、标题、句柄、等来绑定
#
#app['无标题 - 记事本'].Edit.type_keys('东风吹,战鼓擂',with_spaces=True) #如果没有with_spaces 参数,则不会输入空格。请参阅SendKeys的文档,了解此方法,因为它是SendKeys的一个薄包装器。
#
#app['无标题 - 记事本'].menu_select('文件->退出') #菜单检索
#app['记事本']['不保存'].close_click() #使用close_click()而不是click()更安全,因为close_click()会等待一段时间以给窗口时间关闭对话框。
# =============================================================================
# #示例:启动Tdxw2软件客户端
# =============================================================================
app=Application(backend='win32')
app.connect(path='D:\\02通达信金融终端软件客户端v7.46\\TdxW.exe')
dlg=app.window(title_re='通达信金融终端V7.46',class_name='TdxW_MainFrame_Class')
dlg.print_control_identifiers(filename='输出控件文件夹\\dlg_T.txt')
dlg.draw_outline() #周围划线,单独输出可直观显示
dlg_CD=dlg['#32770']
dlg_CD.print_control_identifiers(filename='输出控件文件夹\\dlg_CD.txt')
dlg_CD.draw_outline(colour='red')
#下面开始官方文档内容:
# =============================================================================
# #新开程序 或 链接已在运行程序
# =============================================================================
#新开程序
#appT2=Application().start('D:\\02通达信金融终端软件客户端v7.46\\TdxW.exe')
#链接已在运行程序
#参数path=''
#参数press=
#参数handle=
#参数组合 title_re='',class_name=''
#appT2=Application().connect(path='D:\\02通达信金融终端软件客户端v7.46\\TdxW.exe')
# =============================================================================
# #指定对话框
# =============================================================================
#符号点. 等同于 列表[]
#dig=app.top_window() #返回程序顶端窗口
#dig=app.window(title_re='.*记事本.*',class_name='')
#print(app.windows()) #返回所有对话框
# =============================================================================
# #指定控件
# =============================================================================
#app.dlg.control
#app['dlg']['control']
#当前会话中所有控件输出
#可选参数depth= 指定输出深度
#可选参数filename='' 指定输出目录
#app[dlg].print_control_identifiers(depth=,filename='')
# =============================================================================
# #隐式等待
# =============================================================================
#wait方法
#dlg.wait(“exists ready”, timeout = 5, retry_interval = 3)
#dlg.wait(wait_for, timeout = None, retry_interval = None)
#参数wait_for可传入五种参数, 可以组合传参,但要以空格隔开:
#exists: 窗口变成有效的句柄
#visible: 窗口可见,没有隐藏
#enabled: 窗口没有disable
#ready: visible + enable
#active: active
#参数timeout:设置超时时间,若在n秒内没有等到窗口在wait_for中传入的几种状态,则会抛出TimeoutError。
#参数retry_interval:超时后,间隔n秒再次重试。
#wait_not方法
#dlg.wait_not(wait_for_not,timeout = None,retry_interval = None)
#等待窗口不处于某种状态时。参数与wait传参一致。
# =============================================================================
# #通用操作
# =============================================================================
#dlg.popup_window() #如果现实,则返回弹出窗口,如果没有弹出窗口则返回self
#dlg.WindowText() #返回对话框的标题文本
#print(dlg.menu()) #返回对话框的菜单
#dlg.menu_items() #返回对话框的所有菜单项及紫菜单项
#dlg.hide_from_taskbar() #从Windows任务栏隐藏对话框
#dlg.is_in_taskbar() #是否显示在Windows任务栏中
#dlg.show_in_taskbar() #在Windows任务栏中显示该对话框
#dlg.get_show_state() #获取显示状态 1恢复状态/2最小化/3最大化
#dlg.is_maximized() #是否最大化
#dlg.is_minimized() #是否最小化
#dlg.is_normal() #是否正常(没有最小化也没有最大化)
#
#dlg.maximize() #最大化
#dlg.minimize() #最小化
#dlg.restore() #窗口恢复之前状态
#
##dlg.menu() #返回控件的菜单
##dlg.menu_item(path='') #返回参数path指定的菜单项
##dlg.menu_items() #返回对话框的菜单项,如果没有菜单项则返回空列表
##dlg.menu_select() #查找路径指定的菜单项 参数 ——>
#
#dlg.move_mouse(coords=(0,0)) #移动鼠标
#dlg.move_window(x=500,y=500) #移动窗口到位置
#dlg.minimize()
#
#dlg.popup_window() #如果现实,则返回弹出窗口,如果没有弹出窗口则返回self
#
#dlg.force_close() #强制关闭对话框并返回结果
#dlg.close() #关闭对话框
#dlg.close_alt_f4() #按alt+F4关闭窗口
#dlg.close_click() #执行应该使窗口消失的单击操作,与click()的唯一区别是点击操作之前和之后有额外的延迟。
# =============================================================================
# #系统托盘
# =============================================================================
#
#from pywinauto.application import Application
#
#appS=Application().connect(path='explorer')
#systray_icons= appS.ShellTrayWnd
#systray_icons.draw_outline()
#systray_icons.print_control_identifiers(filename='systray.txt')
#
#
##systray_icons['Start'].draw_outline(colour='blue') #开始
#
#systray_icons['MSTaskSwWClass'].draw_outline(colour='blue') #正在运行程序
#systray_icons['TrayNotifyWnd '].draw_outline(colour='red') #任务栏右下角区域
#systray_icons['StartButton'].draw_outline(colour='blue') #右下角上拉键
#systray_icons['TrayClockWClass'].draw_outline(colour='red') #时钟
# =============================================================================
# #鼠标控制
# =============================================================================
#pywinauto.mouse.click(button='left',coords=(0,0)) #单击指定坐标
#pywinauto.mouse.double_click(button='left',coords=(0,0)) #双击指定坐标
#pywinauto.mouse.move(coords=(0,0)) #鼠标移动到指定坐标
#
#pywinauto.mouse.press(button='left',coords=(0,0)) #指定位置按下鼠标左键
#pywinauto.mouse.release(button='left',coords=(100,200)) #指定位置释放鼠标左键
#
#pywinauto.mouse.right_click(coords=(0,0)) #右键点击指定位置
#
#pywinauto.mouse.scroll(coords=(500,500),wheel_dist=-100) #中键滚动到指定坐标
#pywinauto.mouse.wheel_click(coords=(0, 0)) #中键单击指定坐标
# =============================================================================
# #鼠标点击
# =============================================================================
#click() #点击Button控件
#check_by_click() #通过click()方法勾选checkbox
#uncheck_by_click() #通过click()方法取消勾选checkbox
#get_check_state() #返回checkbox的勾选状态(0没勾选,1勾选,2不定)
#is_checked #(勾选返回true,为勾选返回false,不定返回None)
#check() #勾选checkbox
#uncheck() #不勾选checkbox
#invoke() #点击(uia mode)
#toggle() #勾选checkbox(uia mode)
# =============================================================================
# #键盘操作
# =============================================================================
#type_keys('')
'''
SHIFT +
CTRL ^
ALT %
空格键 {SPACE}
BACKSPACE {BACKSPACE}、{BS} or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER} or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
+ {ADD}
- {SUBTRACT}
* {MULTIPLY}
/ {DIVIDE}
F1 {F1}
F2 {F2}
F3 {F3}
.....
F15 {F15}
F16 {F16}
'''