如何在7-zip“添加到存档”对话框的第一个字段中编写“hello”?
到目前为止,我成功地触发了7-zip(windows 64x)“Add to Archive”对话框
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>]
我没有看到任何“添加到存档”窗口,为什么?这些是什么东西(例如在32_控件中,DialogWrapper)?
瓦西里已经回答了这个问题。我只想收集评论和latest docs中提到的所有要点。(答案为斜体)。不要犹豫,填补这个基本图图留下的洞(几个问题仍然存在),或纠正它。
1/我无法连接到此对话框
回答:它不起作用,因为它是另一个过程。所以这是一种新的应用程序(app2)。所以你需要重新连接到它(一些应用程序可以为它们启动的每个窗口启动一个新进程)。
对于某些应用程序,您还需要指定“后端”,默认为“win32”。如果间谍工具(参见下文)可以在“uia”模式下看到“控件”(每个字段、按钮的名称、类等),则应使用
Application(backend='uia')
要重新连接,需要重新进行
app2=Application().connect(path='7zG.exe')
然后选择控件似乎越是指定要连接的内容,连接起来就越容易。这可能就是为什么瓦西里使用了路径+标题。我只想表明它也只适用于标题―在本例中
2/是的,但我怎么知道这是一个新的过程?
回答:你可以在间谍工具(cf 6/和下面的打印屏幕)中看到这一点。
3/I无法在该对话框上选择控件(在字段中输入文本):
回答:这很正常,你需要先连接到对话框。首先连接到app2(参见上文),然后执行以下操作:
4/我试图使用
print(app.windows())
在我的应用程序上找到所有可用的对话框,但它打印了这个(以及其他奇怪的东西):我没有看到任何“添加到存档”窗口,为什么?这些东西是什么(例如,在32_controls.DialogWrapper中)?
回答:“它为每个窗口返回可操作的包装”。每个字符串都是对象的内存位置(地址)。我不知道如何使用它们
您可以使用
print ([w.window_text() for w in app.windows()])
获得一些文本(它打印['C:\\Users\\Me\\Desktop\\', '', '', 'M', 'Default IME']
不知道这意味着什么)5/如果获得访问这些对话框和控件所需的所有信息,是否真的需要打印这些对话框或控件列表?
我不知道。我还不完全理解打印对话框列表的必要性。但我理解(可能)的是,这个控件列表提供了缩短代码的方法。它提供类似于
AddToArchive
的东西。不用写app2.window(title_re="Add to Archive").
,你可以写app2.AddToArchive.
6/Spy++和inspect.exe甚至都不显示进程(另外,第二个进程又重又有错误)
答案:最好的间谍工具似乎是来自AutoHotkey的(AU3_Spy.exe的打印屏幕下面)。它在一个小窗口中显示名称/类/进程,甚至控件名称(以及其他东西),而不加载CPU。与其他两个间谍工具不同,AutoHotkey提供了正确的控件名
还要注意,控件名称从一个监视工具更改为另一个。最准确的似乎是来自autohotkey(目前为止所有的测试都有效)。它只提供你需要的东西,另一个间谍工具显示了很多无用的东西,除了你需要的东西(如过程和控件的真实名称)
你会发现一堆间谍工具hereAcc explorer很好地完成了Ahk(它与spy++做了相同的工作,但只是更好)。
(请随意使用我的截图)
额外提示:
有没有办法缩短代码?
相当于
.AddtoArchive
。所以你也可以写:其他应用程序如同上:
相当于:
有我可以玩的动作列表吗? 您将here执行许多操作(在列表、按钮、编辑字段…)。
你可以列出所有可用的方法对象的ds使用:
例如:
在使用pywinauto模块之前,需要先导入它们! 模块是需要导入的类(例如:pywinauto.application module) 使用them不要忘记导入类!例如,要使用findbestmatch module中列出的方法之一,您需要:
from pywinauto import findbestmatch
另一个例子:您需要
from pywinauto import keyboard
来使用SendKeys('^a^c')
我看到
7zFM.exe
生成另一个进程(它甚至是另一个可执行文件!)通过这个对话。您需要连接到新进程。[编辑]
如果打开任务管理器(Win8.1或Win10上的“详细信息”选项卡),您将看到进程
7zG.exe
。另一种方法是:在Spy++中,当您查看windows层次结构时,右键单击对话框“Add to Archive”并选择“Properties”,然后切换到具有ProcessID值的选项卡(它显示为十六进制数)。为“文件管理器”对话框比较类似的数字。有不同的进程ID!在Inspect.exe中,您还可以在屏幕截图上看到属性
ProcessId
(==5304)。在Task Manager/Details/columnPID
中找到这个值。相关问题 更多 >
编程相关推荐