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

那么如何判斷程序的backend是’win32’還是’uia’呢?官方文檔中推薦使用spy++和inspect來檢查。有人專門整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。
spy++咱們之前講過。接下來將將如何使用inspect來判斷backend的類別。
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。

再來看點擊 屏幕錄像專家程序的結果

inspect中顯示拒絕訪問,說明屏幕錄像專家程序的backend應該是win32。
(二)確定自動化入口點
這里主要是限制自動化控制進程的范圍。如一個程序有多個實例,自動化控制一個實例,而保證其他實例(進程)不受影響。
主要有兩種對象可以建立這種入口點——Application() , Desktop().
Application的作用范圍是一個進程,如一般的桌面應用程序都為此類。
Desktop的作用范圍可以跨進程。主要用於像win10的計算器這樣包含多個進程的程序。這種目前比較少見。使用方法見entry-points-for-automation
(三)連接到進程
建立好入口后,我們需要連接到進程中。這里有兩種方法:
- 重新開啟一個進程。使用Application對象的start()方法
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")
第1、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的插件窗口就彈出來了。