用python win32 获得计算器里的计算结果 50
怎么获得计算结果98图片右边是用SPYXX捕获的数据我需要的是直接用程序得到计算结果(上图中98)不用去操作计算器...
怎么获得计算结果 98
图片右边是用SPYXX捕获的数据
我需要的是直接用程序得到计算结果(上图中 98)
不用去操作计算器 展开
图片右边是用SPYXX捕获的数据
我需要的是直接用程序得到计算结果(上图中 98)
不用去操作计算器 展开
2个回答
展开全部
给你一个思路。用 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控件就是结果的控件。
展开全部
参考以下:可以把结果保存在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方法啊,选中计算器,把结果拷贝到剪切板,不就有了吗。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询