https://github.com/yinkaisheng/Python-Automation-for-Windows
- 1.uiautomation的安装
pip install uiautomation
- 2.uiautomation的使用
在cmd中运行automation.py -t 3 #3秒后遍历最上层窗口的控件 -f, 抓取焦点处控件 -n, 显示控件的完整name -c, 遍历光标下的控件 -d,遍历的层级
import uiautomation as auto
window=auto.WindowControl(ClassName="CabinetWClass",searchDepth=1) #控制面板窗口
window.SwitchToThisWindow() # 切换窗口
1.抓取不到Button属性,使用键盘操作(不稳定)
import os import time import subprocess from pykeyboard import PyKeyboard #需先安装PyUserInput model import uiautomation as auto subprocess.Popen("3dmark-setup.exe") k = PyKeyboard() # os.system("start 3dmark-setup.exe") while True: try: welcome=auto.TabItemControl(Name="WELCOME",searchDepth=3) #此应用无法抓取具体Button,通过键盘输入 Tab Space Enter等来操作,需要判断此时处于哪一页面 if(welcome.GetSelectionItemPattern().IsSelected): #此处根据IsSelected判断是否在此页面,Bool值 print("Find WELCOME") time.sleep(2) k.tap_key(k.enter_key) break except: print("Can't Find WELCOME") while True: try: welcome=auto.TabItemControl(Name="EULA",searchDepth=3) if(welcome.GetSelectionItemPattern().IsSelected): print("Find EULA") time.sleep(2) k.tap_key(k.tab_key,n=3) k.tap_key(k.space_key) k.tap_key(k.enter_key) break except: print("Can't Find EULA") while True: try: welcome=auto.TabItemControl(Name="OPTIONS",searchDepth=3) if(welcome.GetSelectionItemPattern().IsSelected): print("Find OPTIONS") time.sleep(2) k.tap_key(k.enter_key) break except: print("Can't Find OPTIONS") while True: try: welcome=auto.TabItemControl(Name="INSTALL",searchDepth=3) if(welcome.GetSelectionItemPattern().IsSelected): print("Installing...") time.sleep(2) k.tap_key(k.enter_key) break except: print("Can't Find INSTALL") while True: try: welcome=auto.TabItemControl(Name="COMPLETE",searchDepth=3) if(welcome.GetSelectionItemPattern().IsSelected): print("Find COMPLETE") time.sleep(2) k.tap_key(k.enter_key) break except: print("Can't Find COMPLETE")
2.可以抓取到Button等元素的属性,使用Click等方式操作
#更改Windows控制面板中的选项 import uiautomation as auto import subprocess import time import os import locale #获取系统语言 if (locale.getdefaultlocale()[0] == "zh_CN"): Previous_Locations = "上一个位置" Troubleshooting = r"控制面板所有控制面板项疑难解答" Change_settings = "更改设置" Close = "关闭" else: Previous_Locations = "Previous Locations" Troubleshooting = r"Control PanelAll Control Panel ItemsTroubleshooting" Change_settings = "Change settings" Close = "Close" try: subprocess.Popen('Control.exe') window = auto.WindowControl(ClassName="CabinetWClass", searchDepth=1) window.Maximize() # 窗口最大化,避免因分辨率的不同导致元素无法选中 # auto.SendKeys("{WIN}{UP}") #窗口最大化快捷键 button = auto.ButtonControl(searchDepth=7, Name=Previous_Locations) button.Click() auto.SendKeys(Troubleshooting) auto.SendKeys('{Enter}') link = auto.HyperlinkControl(searchDepth=7, ClassName='ControlPanelLink', Name=Change_settings) link.Click() radio = auto.RadioButtonControl(searchDepth=9, ClassName='CCRadioButton', AutomationId='autoOff') # RadioButton 是否选中,Bool值 选中为True 未选中为False radioValue = radio.GetSelectionItemPattern().IsSelected # checkbox ToggleState checkbox = auto.CheckBoxControl(searchDepth=9, ClassName='CCCheckBox', AutomationId='skipCheckbox') SettingOK = auto.ButtonControl(searchDepth=9, ClassName='CCPushButton', AutomationId="settingOK") CloseWindow = auto.ButtonControl(searchDepth=3, Name=Close) flag = False # 检查设置状态 ,如果有修改 ,flag = True, 点击OK 保存 ,如不需修改 直接关闭窗口 if (radioValue == False): radio.Click() flag = True if (checkbox.GetTogglePattern().ToggleState == 1): checkbox.Click() flag = True if (flag == True): SettingOK.Click() CloseWindow.Click() except: print("Fail") os.system("pause") else: print("Pass") os.system("pause")