2017-02-13 64 views
1

如何在7-zip「添加到存檔」對話框的第一個字段上寫上「hello」?pywinauto:如何選擇這個對話框?哪種間諜工具可以使用?我需要什麼信息?

我設法到目前爲止觸發7-ZIP(視窗64倍)「添加到壓縮文件」對話框中使用此

from pywinauto.application import Application 
app = Application().start(r"C:\Program Files\7-Zip\7zFM.exe") #set the app 
app.top_window_().Edit.type_keys(r"C:\Users\me\Desktop{ENTER}") 
app.top_window_().SysListView32.Select(r'test.txt') #select files in list 
app.top_window_().ToolbarAdd.TypeKeys("{ENTER}") #apply 

然後,我不能選擇添加到壓縮文件對話框。

1:這沒有奏效。我猜是因爲它沒有找到對話框。如果是這樣,爲什麼?

app.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers() 

2:這也沒有工作:

app.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello") 

3:我嘗試使用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)?不同的間諜工具

打印屏幕 間諜++爲第一控制對話框 enter image description here

間諜++(它說編輯,但AU enter image description here

inspect.exe的對話框: enter image description here

+0

但是,7zip的可從[命令行]被調用(HTTPS:// sevenzip。 osdn.jp/chm/cmdline/syntax.htm),爲什麼不使用它? –

+0

@PeterWood很高興知道,謝謝!但我想完全理解pywinauto(這是一種練習掌握它的基本功能) –

回答

1

我看到7zFM.exe產生另一個進程(它甚至是另一個可執行文件!)與此dialo G。您需要連接到新流程。

app2 = Application().connect(path='7zG.exe', title='Add to Archive') 
app2.AddToArchive.print_control_identifiers() 

[編輯]

如果你打開任務管理器(在Win8.1或Win10選項卡 「詳細信息」),你會看到過程7zG.exe。另一種方法是:在Spy ++中查看窗口層次結構時,右鍵單擊對話框「添加到存檔」並選擇「屬性」,然後切換到帶有ProcessID值(顯示爲十六進制數字)的選項卡。比較文件管理器對話框的相似數字。有不同的ProcessIDs!

在Inspect.exe中,您還可以看到屬性ProcessId(截圖中的== 5304)。在任務管理器/細節/列PID中找到此值。

+0

對不起,但我不明白。 '我看到7zFM.exe產生了另一個進程(它甚至是另一個可執行文件)。「但是你在哪裏(或怎樣)看到這個?你的意思是你在檢查工具上看到,如果是的話,哪一個? (您是使用inspect.exe工具還是間諜++來查看?或者哪一個?)我在上面的打印屏幕中看不到任何7zG.exe,我很困惑。 –

+0

我在對話框(編輯的問題)上添加了inspect.exe的打印屏幕。它沒有提到7zG.exe。 (我更加困惑) –

+1

如果你打開任務管理器(Win8.1或Win10上的「詳細信息」選項卡),你會看到進程'7zG.exe'。另一種方法是:在Spy ++中查看窗口層次結構時,右鍵單擊「添加到存檔」對話框並選擇「屬性」,然後切換到帶有ProcessID值的選項卡(它顯示爲十六進制數字)。比較文件管理器對話框的相似數字。有不同的ProcessIDs! –

1

瓦西里已經回答了這個問題。我只是想收集在評論和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

你會發現一堆間諜工具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')

+1

謝謝!爲文檔添加了[功能請求311](https://github.com/pywinauto/pywinauto/issues/311)。 –

相關問題