用python win32 获得计算器里的计算结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python win32 获得计算器里的计算结果相关的知识,希望对你有一定的参考价值。

怎么获得计算结果 98
图片右边是用SPYXX捕获的数据
我需要的是直接用程序得到计算结果(上图中 98)
不用去操作计算器

给你一个思路。用 python 的 win32gui 可以枚举所有窗口句柄,想办法获取窗口句柄,然后通过 GetWindowText() 方法来获取窗口的标题,也就是结果所在的窗口句柄。

我用WIN32试了一下,我是hook了鼠标所在的句柄,但当鼠标指向结果时,结果的窗口句柄获取不到,只能获取到结果窗口的上一个窗口的句柄(也就是你图中的00280756的句柄),但可以通过枚举子窗口来获取(也就是枚举你图片中的002F0854句柄),然后经过一系列匹配和判断最终得到结果的值。

# encoding: gb2312

import win32gui

def _MyCallback( hwnd, extra ):
    hwnds = extra
    hwnds.append(hwnd)

def _CallBack(hwnd, extra):
    value, m_index = extra
    if win32gui.GetClassName(hwnd) == 'Static':
        m_index.append(None)
    
    if len(m_index) == 4:
        value.append(win32gui.GetWindowText(hwnd))

def TestEnumWindows():
    windows = []
    results = []
    win32gui.EnumWindows(_MyCallback, (windows))
    i = 0
    for hwnd in windows:
        if win32gui.GetClassName(hwnd) == 'CalcFrame':
            m_index = []
            win32gui.EnumChildWindows(hwnd, _CallBack, (results, m_index))
        i += 1
    for result in results:
        print '计算器的结果为:' , result
TestEnumWindows()

 这样更好一些,可能有些特征不同。我是枚举所有窗口,然后获取窗口的classname为CalcFrame的窗口,然后再枚举CalcFrame的子窗口,然后判断第4个出现的Static控件就是结果的控件。

参考技术A

参考以下:可以把结果保存在win32clipboard

import win32api
import win32com.client
import win32clipboard
class CalcLib(object):
    def __init__(self):
        self.shell = win32com.client.Dispatch("WScript.Shell")
    def launchCalc(self):
        self.shell.Run("calc", 1)
        self.delay()
    def closeCalc(self):
        self.shell.AppActivate("Calculator")
        self.shell.SendKeys("%F4")
    def click(self, key):
        self.shell.AppActivate("Calculator")
        if key in ["+", "^", "%", "~"]:
            key = "" + key + ""
        self.shell.SendKeys(key)
        self.delay()
    def input(self, num):
        if num[0] == "-":
            self.click(num[1:])
            self.click("F9")
        else:
            self.click(num)
        self.delay(2000)
            
    def check(self, expected):
        self.shell.AppActivate("Calculator")
        self.click("^c")
        self.delay()
        win32clipboard.OpenClipboard()
        actual = win32clipboard.GetClipboardData()
        win32clipboard.CloseClipboard()
        if expected != actual:
            raise AssertionError, "Checking Result failed:" + expected + " != " + actual
        
    def delay(self, ms=100):
        win32api.Sleep(ms)
    
    def setup(self):
        self.launchCalc()
    def teardown(self):
        self.closeCalc()
    def add(self, num):
        self.shell.AppActivate("Calculator")
        self.click("+")
        self.input(num)
        
    def equals(self, expected):
        self.shell.AppActivate("Calculator")
        self.click("=")
        self.check(expected)
        
    def multiply(self, num):
        self.shell.AppActivate("Calculator")
        self.click("*")
        self.input(num)    
   
    def divide(self, num):
        self.shell.AppActivate("Calculator")
        self.click("/")
        self.input(num)     
           
if __name__ == '__main__':
    pass

追问

我想要直接得到结果而不用去操作计算器

追答

就是上面的check方法啊,选中计算器,把结果拷贝到剪切板,不就有了吗。。

怎么让win10自带计算器结果只显示小数而不是科学计数法

大家都在问

计算器如何显示小数而不是指数
2个回答1.1万阅读

用户刘叶生
2022-10-04•Ta已获得105赞同
关注
计算器要显示小数而不是指数,须将计算器从分数模式切换到小数模式。

科学计算器通过上面的按键,可以将计算器从分数模式切换到小数模式,从而显示常规的小数。

步骤如下:1、首先拿出计算器,把计算器的开关打开,然后准备开始调试计算器的模式。2、按住计算器中的“SHIFT”键。3、然后再按住“MODESETUP”键。4、再选择数字键“2”,此时调试的模式就是“LineI0”,即小数的模式。5、科学计算器就可以显示常规的小数了。

分享

评论


更多回答

与风叶落
2021-06-03•Ta已获得1211赞同
关注
1、按下计算机的“on”开机键。将计算机处于工作状态。

2、按下计算机左上角的“shift”按钮。

3、按下计算机右上角的“mode”按钮。进入模式选择。

4、按下数字“2”。选择“lineIO”...全文

分享

评论


已展示全部回答
相关问题

科学计算器怎么设置显示常规的小数?
科学计算器通过按键精灵设置显示常规的小数。科学计算器,又称函数计算器,是电子计算器的一种,可进行指数、对数、三角函数、统计等方面的运算。它带有所有普通的函数,所...

2019-08-03
全部2个回答
卡西欧fx-220计算器怎么显示小数?
显示小数点方法: 卡西欧计算器可以按以下方法把小数点调出来。 打开计算器按SHIFT→MODE→2就可以一直显示小数了。或者不作任何设置计算出结果按S〓D键也可以转换为小数。...

2022-11-28
全部1个回答
怎样让casio计算器永远显示小数而不是科学计数法?
01 首先拿出卡西欧计算器,按on把计算器打开,然后准备开始调试计算器的模式。 02 可以看到现在计算机上显示的是分数。 03 按住计算器中的“SHIFT”键。 04 然后再按住“MO...

2019-11-28
全部1个回答
没有更多了
答题赚金币

香肠派对最强拾取设置?

653人在问
女兵搞笑句子?

18638人在问
分析常见的5种无线安全机制的优劣?

2687人在问
非法采矿无罪辩护技巧?

78人在问
happy咳嗽国际服怎么玩?

31013人在问
网易考拉海购都是正品吗?

174人在问
参考技术A 可以通过在该计算器界面中按压shift键,然后点击setup键。并在出现的设置界面中选择LINEIO显示模式即可实现。具体的设置方法如下:
1、在当前的计算器界面中输入对应的除法算式可以看到起计算的结果为分数。
2、此时可以先点击下该计算器界面左上角的SHIFT按键。
3、再按压下该计算器界面右上角的SETUP键。
4、此时可以看到屏幕上出现了多个数字代码的选项,找到LINEIO对应的为数字2.
5、按压下该计算器界面的数字2键。
6、这时如在计算器中输入需要的计算公式即可看到起计算出来的结果即显示为小数了。

以上是关于用python win32 获得计算器里的计算结果的主要内容,如果未能解决你的问题,请参考以下文章

Python 如何获得一个Windows程序窗口,并在窗口里的当前

Python语音识别(计算器)

如何用 Python 计算 CRC32 以匹配在线结果?

微软office excel里的TEXT函数[d]没法计算超过30天的时间差?

怎么让win10自带计算器结果只显示小数而不是科学计数法

为啥C++里面浮点与整数相乘的结果跟在计算器里的不一样呢?浮点我选的float