uiautomation控制计算器,不动鼠标(界面控制)
import os
import uiautomation as auto
import subprocess
import time
class uiautoCalc():
"""uiautomation控制计算器(完全后台操作方案)"""
def __init__(self):
auto.uiautomation.DEBUG_SEARCH_TIME = True
auto.uiautomation.SetGlobalSearchTimeout(2)
self.calcWindow = auto.WindowControl(searchDepth=1, Name='计算器')
if not self.calcWindow.Exists(0, 0):
subprocess.Popen('calc')
time.sleep(1)
self.calcWindow = auto.WindowControl(searchDepth=1, Name='计算器')
def gotoScientific(self):
"""使用快捷键切换到科学计算器"""
# Alt+1 切换到科学计算器
self.calcWindow.SendKeys('{Alt}1', waitTime=0.5)
time.sleep(0.5)
# 清空输入
self.calcWindow.SendKeys('{Esc}', waitTime=0.1)
def getKeyControl(self):
"""获取按键映射表(改用SendKeys方式)"""
key_mapping = {
'0': '0', '1': '1', '2': '2', '3': '3', '4': '4',
'5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
'.': '.', '+': '{+}', '-': '{-}', '*': '{*}', '/': '{/}',
'=': '{=}', '(': '{(}', ')': '{)}'
}
return key_mapping
def calculate(self, expression, key_mapping):
"""完全使用SendKeys计算"""
expression = ''.join(expression.split())
if not expression.endswith('='):
expression += '='
# 发送按键序列
for char in expression:
key = key_mapping[char]
self.calcWindow.SendKeys(key, waitTime=0.05)
# 获取结果
result = self.calcWindow.TextControl(AutomationId='CalculatorResults')
return result.Name.replace('显示为', '').strip()
def calc_demo(self):
"""演示示例"""
self.gotoScientific()
key_mapping = self.getKeyControl()
result = self.calculate('(1 + 2 - 3) * 4 / 5.6 - 7', key_mapping)
print('(1 + 2 - 3) * 4 / 5.6 - 7 =', result)
self.calcWindow.CaptureToImage('calc.png')
self.calcWindow.GetWindowPattern().Close()
if __name__ == "__main__":
ui = uiautoCalc()
ui.calc_demo()