前言
pywinauto 操作GUI應(yīng)用程序上的元素,需先找到指定窗口,基于窗口查找框架再操作。
如何查看窗口信息?
當(dāng)前面啟動(dòng)記事本后,可以通過(guò)inspect.exe 查看窗口信息

主要看2個(gè)屬性,窗口的標(biāo)題,也就是左上角我們看到的

還有一個(gè)是查看的class屬性,只能通過(guò)工具查看
可以通過(guò)標(biāo)題和class屬性,連上窗口
示例1:通過(guò)標(biāo)題連上窗口
代碼語(yǔ)言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
from pywinauto import Applicationapp = Application('uia').start("notepad.exe")w = app['無(wú)標(biāo)題 - 記事本']
示例2:通過(guò)className屬性
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
from pywinauto import Applicationapp = Application('uia').start("notepad.exe")w = app['Notepad']
還有另外一種寫(xiě)法,通過(guò).Notepad 的方式 (不推薦)
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
from pywinauto import Applicationapp = Application('uia').start("notepad.exe")w = app.Notepad
這種點(diǎn)窗口名稱(chēng)的寫(xiě)法,只適合于一些英文的className屬性,一些中文的標(biāo)題,或者有特殊符號(hào)就會(huì)報(bào)語(yǔ)法錯(cuò)誤。
通常用窗口的標(biāo)題操作更穩(wěn)定一些,用class名稱(chēng)有時(shí)候會(huì)報(bào)錯(cuò)找不到
窗口的一些基本操作
窗口的操作方法
最大化 :w.maximize()最小化 :w.minimize()恢復(fù)正常 :w.restore()關(guān)閉窗口:w.close()獲取窗口狀態(tài):w.get_show_state() 返回1 最大化, 0正常,2最小化獲取窗口坐標(biāo):w.rectangle() 返回 (L35, T149, R1544, B913)
操作示例
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
from pywinauto import Applicationimport timeapp = Application('uia').start("notepad.exe")w = app['無(wú)標(biāo)題 - 記事本']time.sleep(2)w.maximize() # 最大化time.sleep(2)w.restore() # 恢復(fù)time.sleep(2)w.close() # 關(guān)閉
window() 方法
前面是通過(guò)窗口的的標(biāo)題操作打開(kāi)的窗口,再介紹一個(gè)最簡(jiǎn)單的方法是top_window(),例如
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
from pywinauto import Applicationapp = Application('uia').start("notepad.exe")dlg = app.top_window()print(dlg)
這將返回具有應(yīng)用程序頂級(jí)窗口的最高順序的窗口。
注意: 它返回的是是應(yīng)用程序的頂級(jí)窗口,如果窗口有覆蓋的情況,那么你可以使用與傳遞給findwindows.find_windows()相同的參數(shù),例如
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
dlg = app.window(title_re="Page Setup", class_name="#32770")
如果對(duì)話框的標(biāo)題很長(zhǎng) – 那么輸入的屬性訪問(wèn)可能會(huì)很長(zhǎng),在這種情況下通常更容易使用
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
app.window(title_re=".*部分標(biāo)題.*")
獲取當(dāng)前應(yīng)用全部windows
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
dialogs = app.windows()
這將返回應(yīng)用程序的所有可見(jiàn),啟用的頂級(jí)窗口的列表。
總結(jié):推薦使用 app.window(title_re=”xxx”) 方法操作指定窗口