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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alooffox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值