Pywinauto是基於Python開發的,用於自動化測試的腳本模塊,主要操做於Windows標準圖形界面。它能夠容許你很容易的發送鼠標、鍵盤動做給Windows的對話框和控件。
其中,最主要功能爲對windows標準控件的一系列動做可編程處理。包括對窗口的指定、鼠標或鍵盤操做、得到控件屬性等等。程序的開始爲對所需應用的啓 動或鏈接。得到程序鏈接後,pywinauto經過窗口的名稱、類名、是否可見等屬性尋找匹配的窗口,進而經過相似方法尋找用戶所需的控件,並得到相應的 句柄。以後,用戶可經過易理解的編程方式對指定控件進行相關操做的編程,包括鼠標點擊、鍵盤輸入、判斷控件間關係、獲取控件屬性等。
官方網站:https://pywinauto.readthedocs.io/en/latest/contents.html,html
pywinauto使用
首先,導入這個模塊python
from pywinauto.application import Application
- 1
(一) 判斷程序的backend
注意,首先須要判斷你要進行的程序是用什麼語言寫的,在實例化的時候會有區別,主要是判斷backend是什麼。

那麼如何判斷程序的backend是’win32’仍是’uia’呢?官方文檔中推薦使用spy++和inspect來檢查。有人專門整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。
spy++我們以前講過。接下來將將如何使用inspect來判斷backend的類別。git
Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.
- 1
將inspect左上角的下拉列表中切換到「UI Automation」,而後鼠標點一下你須要測試的程序窗體,inspect就會顯示相關信息。
下圖爲點擊window文件夾的結果,inspect中顯示了相關的信息,以下圖所示。說明backend爲uia。
github
再來看點擊 屏幕錄像專家程序的結果

inspect中顯示拒絕訪問,說明屏幕錄像專家程序的backend應該是win32。編程
(二)肯定自動化入口點
這裏主要是限制自動化控制進程的範圍。如一個程序有多個實例,自動化控制一個實例,而保證其餘實例(進程)不受影響。
主要有兩種對象能夠創建這種入口點——Application() , Desktop().
Application的做用範圍是一個進程,如通常的桌面應用程序都爲此類。
Desktop的做用範圍能夠跨進程。主要用於像win10的計算器這樣包含多個進程的程序。這種目前比較少見。使用方法見entry-points-for-automationwindows
(三)鏈接到進程
創建好入口後,咱們須要鏈接到進程中。這裏有兩種方法:
- 從新開啓一個進程。使用Application對象的start()方法app
start(self, cmd_line, timeout=app_start_timeout) # instance method:
- 1
這裏的cmd_line參數就是你使用命令行啓動程序的命令語句。因此能夠很方便的實現帶輸入參數的程序啓動。
啓動屏幕錄像專家,能夠使用以下代碼:函數
app = Application().start(r"D:\Program Files (x86)\tlxsoft\屏幕錄像專家 共享版 V2017\屏錄專家.exe")
- 1
- 鏈接到已有的進程。使用Application對象的connect()方法。這個方法對已有進程的綁定很是靈活。
1.使用進程ID (PID)進行綁定。
app = Application().connect(process=19188)
- 1
進程的PID能夠在任務管理器中查看。
工具
2.使用窗口句柄綁定測試
app = Application().connect(handle=0x00230DB6)
- 1
窗口句柄能夠在Spy++中查看

3.使用程序路徑綁定
app = Application().connect(path=r"D:\Program Files (x86)\tlxsoft\屏幕錄像專家 共享版 V2017\屏錄專家.exe")
4.使用標題、類型等匹配
app = Application().connect(title_re="屏幕錄像專家.*", class_name="TMainForm")
第一、2種方法通用性不強,每次運行ID和窗口句柄均可能不同。第3種方法最直接簡單(j建議使用),而第4種方法靈活性最強。
(四) 選擇菜單項
我的感受pywinauto最方便的地方之一就是可以很輕易的操做菜單,並且對於多級菜單毫無壓力。

下面介紹兩種方法來操做它:
- 使用menu_select()函數進行選擇
要從屏幕錄像專家程序的菜單選中轉換工具->EXE/LXE轉成MP4。只須要在python中加入以下語句:
dlg_spec = app.window(title='屏幕錄像專家 V2017') dlg_spec.menu_select(r"轉換工具->EXE/LXE轉成MP4")
- 使用快捷鍵進行選擇
能夠看到,菜單的每一個選項都對應着快捷鍵,能夠使用組合的快捷鍵直接訪問咱們須要的選項。
使用type_keys()函數,這裏須要的快捷鍵是Alt+T+P:
dlg_spec = app.window(title='屏幕錄像專家 V2017') dlg_spec.type_keys('%TP')
對於一些特殊符號的快捷鍵,對應的碼錶以下:
SHIFT + CTRL ^ ALT % 空格鍵 {SPACE} BACKSPACE {BACKSPACE}、{BS} or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER} or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP} PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} + {ADD} - {SUBTRACT} * {MULTIPLY} / {DIVIDE} F1 {F1} F2 {F2} F3 {F3} ..... F15 {F15} F16 {F16}
- 束後,EXE轉MP4的插件窗口就彈出來了。