瓦西里已經回答了這個問題。我只是想收集在評論和latest docs中提到的所有要點)。 (在斜體的答案)。不要猶豫,填補留在這個基本tuto(仍然存在幾個問題),或糾正它的漏洞。
1 /我無法連接到該對話框
app.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers()
答:它沒有工作,因爲它的另一個進程。所以它是一種新的應用程序(app2)。所以你需要重新連接它(一些應用程序可以爲他們啓動的每個窗口啓動一個新的進程)。
對於某些應用程序,您還需要指定「後端」,默認情況下它是「win32」。如果間諜工具(CF波紋管)可在「UIA」模式看到「控制」(姓名,班級,每個字段,按鈕等...),你應該使用Application(backend='uia')
要重新連接需要再次做app2=Application().connect(path='7zG.exe')
然後選擇控件
看來,你指定的東西越多,連接起來就越容易連接。這可能是瓦西里使用路徑+標題的原因。我只是想表明,它也適用於只有標題 - 在這種情況下
2 /是的但我知道這是一個新的過程嗎?
回答:您可以在間諜工具(cf 6 /和printscreen bellow)中看到。
3 /我不能說對話框中選擇控制(輸入字段中的文本):
app.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello")
答:這是正常的,你需要首先連接到該對話框。首先連接到APP2(參見上文),那麼這樣做:
app2.window(title_re="Add to Archive", class_name="#32770").Edit1.type_keys(r"great success!", with_spaces = True)
4 /我試着用print(app.windows())
找到我的應用程序的所有可用的對話,但它打印這個(和其他奇怪的東西):
[<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004033D68>, <pywinauto.controls.common_controls.ToolTipsWrapper object at 0x0000000004089128>, <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x0000000004089208>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x
00000000040893C8>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004089390>]
我沒有看到任何「添加到存檔」窗口,爲什麼?什麼是(例如in32_controls.DialogWrapper)?
回答:「它爲每個窗口返回可操作的包裝器」。每個字符串都是對象的內存位置(地址)。我不知道如何使用它們
你可以使用print ([w.window_text() for w in app.windows()])
一些文本(它打印['C:\\Users\\Me\\Desktop\\', '', '', 'M', 'Default IME']
不知道那有什麼意思)
5 /如果我需要的所有信息訪問這些對話框和控件是否真的需要打印這些對話框或控件的列表?
我不知道。我還沒有完全理解打印對話框列表的必要性。但是我所理解的(可能)是這個控制列表提供了縮短代碼的方法。例如。它給出了諸如AddToArchive
之類的東西。相反書面方式你可以寫app2.AddToArchive.
6 /間諜++和inspect.exe甚至不顯示的過程(加上第二重和越野車)
答:最好的間諜工具似乎是AutoHotkey的一個(下面是AU3_Spy.exe的打印屏幕)。它在不加載CPU的情況下在一個小窗口中顯示名稱/類/過程,甚至控制名稱(以及其他內容)。與其他2個間諜工具不同,AutoHotkey提供了正確的控制名稱
另請注意,控件名稱從一個間諜工具更改爲另一個間諜工具。最準確的似乎是從autohotkey(到目前爲止所有的測試工作)。它只是給你需要的東西,其他的間諜工具顯示了很多無用的東西exept你所需要的(如進程和控制者的真實名稱)
![enter image description here](https://i.stack.imgur.com/uBg1o.png)
你會發現一堆間諜工具here Acc explorer完全不錯Ahk(它和spy ++完全相同,但只是更好)。
(隨意使用我的截圖)
額外提示:
有沒有辦法來縮短代碼?
.window(title_re="Add to Archive", class_name="#32770")
相當於.AddtoArchive
。所以,你也可以這樣寫:
app2.AddtoArchive.type_keys(r"great success!", with_spaces = True)
同上其他應用程式,例如同上:
dittoApp=Application().connect(path='Ditto.exe')
ditto_dialog=ditto.window(best_match='Ditto')
等同於:
ditto=Application().connect(path='Ditto.exe')
dittoApp.Ditto
是否有動作,我可以玩的名單? 你會here許多行動,你可以執行(列表,按鈕,編輯領域...)。
可以使用列出對象的所有可用的方法:
print(dir(dlg_spec.wrapper_object()))
例如:
print(dir(ditto.ditto.SysListView321.wrapper_object()))
您需要在使用前導入pywinauto模塊! 模塊是您需要導入的類(例如:pywinauto.application module) 要使用them不要忘記導入類!前使用中列出的方法的一個的findbestmatch module需要:from pywinauto import findbestmatch
又如:你需要from pywinauto import keyboard
使用SendKeys('^a^c')
但是,7zip的可從[命令行]被調用(HTTPS:// sevenzip。 osdn.jp/chm/cmdline/syntax.htm),爲什麼不使用它? –
@PeterWood很高興知道,謝謝!但我想完全理解pywinauto(這是一種練習掌握它的基本功能) –