2013-10-15 4 views
0

Я хотел получить результат операции из калькулятора, но не могу найти никаких специальных функций. Вот мой код:Получить результат от калькулятора с WScript.Shell

import win32com.client 
import win32api 
shell = win32com.client.Dispatch("WScript.Shell") 
shell.Run("calc") 
win32api.Sleep(100) 
shell.AppActivate("Calculator") 
win32api.Sleep(100) 
shell.SendKeys("1{+}") 
win32api.Sleep(500) 
shell.SendKeys("2") 
win32api.Sleep(500) 

И тогда я хочу, чтобы получить результат с известково и сравнить его с if_then, как

if calc_result== 3: 
    print ("True") 
else: 
    print ("False") 

Я работаю на Python 3.3.2, и это мои первые шаги , Спасибо.

+0

Является ли это просто упражнение в использовании win32 апи? Потому что в противном случае, вероятно, есть способы лучше сделать то, что вы пытаетесь сделать;) –

+0

Да, это упражнение с win32api :( – stvieG

ответ

0

Я не уверен, что вы делаете, может быть более эффективные способы, но вы можете отправить = щелчок с последующим Ctrl + C, как 1{+}2{=}^C так скопировать его в буфер обмена, а затем прочитать его с помощью функции буфера обмена Windows, что-то вроде:

import win32com.client 
import win32api 
shell = win32com.client.Dispatch("WScript.Shell") 
shell.Run("calc") 
win32api.Sleep(100) 
shell.AppActivate("Calculator") 
shell.SendKeys("1{+}2{=}^C") 
win32api.Sleep(500) 

import win32clipboard 
import win32con 
win32clipboard.OpenClipboard() 
r = win32clipboard.GetClipboardData(win32con.CF_TEXT).rstrip('\x00') 
win32clipboard.CloseClipboard() 
print(r) 

предварительный просмотр:

>>> import win32com.client 
>>> import win32api 
>>> shell = win32com.client.Dispatch("WScript.Shell") 
>>> shell.Run("calc") 
0 
>>> win32api.Sleep(100) 
0 
>>> shell.AppActivate("Calculator") 
False 
>>> shell.SendKeys("1{+}2{=}^C") 
>>> win32api.Sleep(500) 
0 
>>> 
>>> import win32clipboard 
>>> import win32con 
>>> win32clipboard.OpenClipboard() 
>>> r = win32clipboard.GetClipboardData(win32con.CF_TEXT).rstrip('\x00') 
>>> win32clipboard.CloseClipboard() 
>>> print(r) 
3 
>>> 
+0

Спасибо, я думаю, что это близко к правильному решению, но у меня проблема Я работаю над Win7, а значение r равно '20 .6 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ ... '. – stvieG

+0

@stvieG Попробуйте сделать 'r.rstrip (' \ x00 ')' to удалите эти пустые байты, я обновил код сейчас. –

Смежные вопросы