2015-07-12 31 views
2

我試圖做一個小功能,將等待,直到出現某個窗口,然後發送按鍵(ALT + I),我一直在嘗試用pywinauto做到這一點,但沒有成功。 從我在documantation讀過我可以使用pywinauto等待窗口出現併發送按鍵

pywinauto.application.WindowSpecification.Exists() 

,但我只是不明白如何指定什麼我要找的,我可以使用窗口標題或進程名稱,但找不到一個好的解釋。

另外,除了pywinauto之外,還有一個麪糊或更容易使用的模塊嗎?我不需要做複雜的自動化,只需等待一個窗口併發送一些密鑰即可。

編輯

好吧,我找到了解決辦法,一個簡單的函數,循環永遠

def auto_accept(*args): 
    while True: 
     try: 
      app = pywinauto.Application() 
      app.window_(title='Untitled - Notepad').SetFocus() 
      app.window_(title='Untitled - Notepad').TypeKeys("{1}{2}{3}") 
     except (pywinauto.findwindows.WindowNotFoundError, pywinauto.timings.TimeoutError): 
      pass 

但現在我總是得到「2015-07-12 12警告:18:02887信息:類型化文本到記事本:{1} {2} {3}「,我不能使用警告模塊將它們過濾掉,還有另一種方法來過濾\禁用它們嗎?這是一個問題,因爲當我使用py2exe創建一個exe文件時,程序關閉後會告訴我有錯誤,但唯一的錯誤是我從sendkeys獲得的警告。

回答

3

您可以簡單地使用Wait/WaitNot方法WindowSpecification對象:

from pywinauto.application import Application 
app = Application.start('executable') 
app.WindowSpecification.Wait('enabled').TypeKeys('%i') # % - alt,^- ctrl 

WindowSpecification可以用更多的細節設置:

app.Window_(title='Title', class_name='#32770') 

爲Window_方法的所有可能的參數是一樣的for find_windows function

對於長期操作,您可以設置單等待超時:Wait('enabled', timeout=20)或設置超時爲每個等待全球:Timings.window_find_timeout = 10


編輯:調用此代碼import pywinauto後禁用日誌記錄:

import logging 
logger = logging.getLogger('pywinauto') 
logger.level = logging.WARNING # or higher 

記錄器級別:

Level Numeric value 
CRITICAL 50 
ERROR 40 
WARNING 30 
INFO 20 
DEBUG 10 
NOTSET 0 
+0

謝謝,但我發現解決方案,另一方面,如何禁用發送擊鍵時收到的警告?我總是收到警告,如「2015-07-13 12:18:03,100信息:鍵入文字到記事本:{1} {2} {3}」,我無法使用警告模塊將它們過濾掉。 –

+0

因爲它是日誌模塊的東西。更新的答案涵蓋了這一點。 –

+0

pywinauto 0.5.1將有一個文檔化的快捷方式:'pywinauto.actionlogger.disable()'感謝用例。 –