J. *_*oes 4 python automation 7zip pywinauto python-3.x
如何在 7-zip“添加到存档”对话框的第一个字段中写入“hello”?
到目前为止,我设法使用此触发 7-zip (windows 64x)“添加到存档”对话框
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
Run Code Online (Sandbox Code Playgroud)
然后我无法选择“添加到存档”对话框。
1:这不起作用。我猜是因为它没有找到对话框。如果是这样,为什么?
app.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers()
Run Code Online (Sandbox Code Playgroud)
2:这也不起作用:
app.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello")
Run Code Online (Sandbox Code Playgroud)
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>]
Run Code Online (Sandbox Code Playgroud)
我没有看到任何“添加到存档”窗口,为什么?这些东西是什么(例如 in32_controls.DialogWrapper)?
瓦西里已经回答了这个问题。我只是想收集评论和最新文档中提到的所有要点)。(答案为斜体)。请毫不犹豫地填补这个基本教程中留下的漏洞(仍然存在几个问题),或者纠正它。
\n\n1/ 我无法连接到此对话框
\n\napp.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers()\nRun Code Online (Sandbox Code Playgroud)\n\n答:它不起作用,因为它是另一个过程。所以这是一种新的应用程序(app2)。因此,您需要重新连接到它(某些应用程序可以为它们启动的每个窗口启动一个新进程)。
\n\n对于某些应用程序,您还需要指定“后端”,默认情况下它是“win32”。如果间谍工具(参见下面)可以在“uia”模式下看到“控件”(每个字段的名称、类等、按钮...),则应该使用Application(backend=\'uia\')
要重新连接,您需要再次执行操作app2=Application().connect(path=\'7zG.exe\'),然后选择控件
似乎您指定的连接内容越多,连接就越容易。这可能就是瓦西里使用路径+标题的原因。我只是想表明它也仅适用于本例中的标题 \xe2\x80\x95
\n\n2/ 是的,但是我怎么知道这是一个新流程?
\n\n答案:您可以在间谍工具中看到这一点(参见 6/ 和下面的打印屏幕)。
\n\n3/ 我无法选择该对话框上的控件(在字段中输入文本):
\n\napp.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello")\nRun Code Online (Sandbox Code Playgroud)\n\n答:这是正常的,您需要先连接到对话框。首先连接到 app2(参见上文),然后执行以下操作:
\n\napp2.window(title_re="Add to Archive", class_name="#32770").Edit1.type_keys(r"great success!", with_spaces = True)\nRun Code Online (Sandbox Code Playgroud)\n\n4/我尝试使用查找我的应用程序上的所有可用对话框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\n00000000040893C8>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004089390>]\nRun Code Online (Sandbox Code Playgroud)\n\n我没有看到任何“添加到存档”窗口,为什么?这些东西是什么(例如 in32_controls.DialogWrapper)?
\n\n答案:“它为每个窗口返回可操作的包装器”。每个字符串都是对象的内存位置(地址)。我不知道如何使用它们
\n\n您可以使用获取一些文本print ([w.window_text() for w in app.windows()]) (它打印出[\'C:\\\\Users\\\\Me\\\\Desktop\\\\\', \'\', \'\', \'M\', \'Default IME\']不知道这意味着什么。)
5/ 如果我获得了访问这些对话框和控件所需的所有信息,我真的需要打印这些对话框或控件列表吗?
\n\n我不知道。我还没有完全理解打印对话框列表的必要性。但我理解(也许)是这个控件列表提供了缩短代码的方法。例如。它给出了类似的东西AddToArchive。app2.window(title_re="Add to Archive").你可以写而不是写app2.AddToArchive.
6/ Spy++ 和inspect.exe 甚至不显示进程(加上第二个很重且有错误)
\n\n答案:最好的间谍工具似乎是来自 AutoHotkey 的工具(下面是 AU3_Spy.exe 的打印屏幕)。它在一个小窗口中显示名称/类/进程,甚至控件名称(和其他内容),而无需加载 CPU。与其他 2 个间谍工具不同,AutoHotkey 给出了正确的控件名称
\n\n另请注意,控件名称从一种间谍工具更改为另一种。最准确的似乎是来自 autohotkey 的(到目前为止所有测试都有效)。它只提供你需要的东西,其他间谍工具会显示很多无用的东西,除了你需要的东西(例如进程和控件的真实名称)
\n\n\n\n你会在这里找到一堆间谍工具Acc explorer 非常好 Ahk (它的功能与间谍++相同,但更好)。
\n\n(欢迎使用我的截图)
\n\n额外提示:
\n\n有没有办法缩短代码?
\n\n.window(title_re="Add to Archive", class_name="#32770")\nRun Code Online (Sandbox Code Playgroud)\n\n相当于.AddtoArchive. 所以你也可以写:
app2.AddtoArchive.type_keys(r"great success!", with_spaces = True)\nRun Code Online (Sandbox Code Playgroud)\n\n同上其他应用程序,如同上:
\n\ndittoApp=Application().connect(path=\'Ditto.exe\')\nditto_dialog=ditto.window(best_match=\'Ditto\')\nRun Code Online (Sandbox Code Playgroud)\n\n相当于:
\n\nditto=Application().connect(path=\'Ditto.exe\')\ndittoApp.Ditto\nRun Code Online (Sandbox Code Playgroud)\n\n有我可以玩的动作列表吗?\n您将在这里执行许多操作(在列表、按钮、编辑字段...)。
\n\n您可以使用以下方法列出对象的所有可用方法:
\n\nprint(dir(dlg_spec.wrapper_object()))\nRun Code Online (Sandbox Code Playgroud)\n\n前任:
\n\nprint(dir(ditto.ditto.SysListView321.wrapper_object()))\nRun Code Online (Sandbox Code Playgroud)\n\n使用之前需要导入 pywinauto 模块!\n模块是您需要导入的类(例如:pywinauto.application module)\n要使用它们,请不要忘记导入该类!例如,要使用findbestmatch 模块中列出的方法之一,您需要:from pywinauto import findbestmatch
另一个例子:你需要from pywinauto import keyboard使用SendKeys(\'^a^c\')
| 归档时间: |
|
| 查看次数: |
12116 次 |
| 最近记录: |