我如何使用 Pywinauto select Microsoft Office 对话框中的特定编辑控制器和 Python

How do I select a particular edit controller from Microsoft Office dialog box using Pywinauto and Python

我正在尝试创建一个 Python 脚本,它将使用提供的数据自动填充 Microsoft Word 的“创建来源”对话框中的期刊文章详细信息。

基本上,我想用包含“作者”、“标题”、“期刊名称”、“年份”等适当数据的变量以编程方式填充输入框

我正尝试使用 Pywinauto select 这些框。我已成功连接 Microsoft Word 并使用以下代码选择了“创建源”对话框:

app = Application(backend='uia').connect(title='Document1 - Word')

createSource = app.Document1Word.window(title='Create Source').print_control_identifiers()

上述代码中控件标识符的片段

   | Edit - ''    (L1278, T511, R1669, B525)
   | ['EditorEdit', 'Edit10', 'EditorEdit0', 'EditorEdit1']
   | child_window(auto_id="86", control_type="Edit")
   | 
   | Edit - ''    (L1278, T534, R1753, B548)
   | ['PublisherEdit', 'Edit11', 'PublisherEdit0', 'PublisherEdit1']
   | child_window(auto_id="93", control_type="Edit")
   | 
   | Edit - ''    (L1228, T563, R1763, B574)
   | ['VolumeEdit', 'Edit12', 'VolumeEdit0', 'VolumeEdit1']
   | child_window(auto_id="96", control_type="Edit")

现在假设,如果我使用 child_window(auto_id="93", control_type="Edit") 定位“发布者”。它第一次工作正常。但问题是这些 auto_id 每次程序甚至对话框重新启动时都会更改。例如,现在“Publisher”编辑框(输入框)的 auto_id="93",下一次可能是 57 或任何任意值。这会破坏整个脚本。

我在做什么:

app = Application(backend='uia').connect(title='Document1 - Word')
createSource = app.Document1Word.window(title='Create Source')
EditPublisherName = createSource.child_window(auto_id="93", control_type="Edit").wrapper_object()
EditPublisherName.set_edit_text("XYZ Publishers")

同样,上面的代码第一次运行得很好。它用“XYZ Publisher”字符串填充“Publisher”编辑框。但是,如果我重新启动对话框,此脚本将无法工作。而当我运行 .print_control_identifiers() 重启程序或对话框后,所有的 auto_ids 都会被改变。 有没有更好的方法来定位这些编辑框?

我假设,别名不会从一个 运行 另一个运行中改变。如果是这样,我们可以做这样的事情。

set_text=app.DialogName["PublisherEdit"].type_keys("XYZ Publishers")

需要尝试这样的事情