【问题标题】:How to add an item to a listbox with PyWinAuto?如何使用 PyWinAuto 将项目添加到列表框?
【发布时间】:2020-08-01 01:51:42
【问题描述】:

我正在使用 Python 版本 3.8.2(64 位) 我正在使用 PyWinAuto 0.6.8 版

我正在尝试自动化 Windows 桌面应用程序。我需要将项目添加到列表框。

到目前为止,我可以打印列表框中的项目数。没问题

    app = Application()
app.connect(path=r"C:\Program Files (x86)\Example\WindowsFormsApp.exe")

#Get a dialog...
dlg = app.top_window()
dlg.print_control_identifiers()

#Click the 'Generate File' buton'
windowHandle = app.window(best_match='Example Windows Forms App')
listBox = windowHandle.ListBox
print("**********************************") 
print(listBox.item_count())
print("**********************************")

有没有人知道我将如何将项目添加到列表框?

【问题讨论】:

  • 不确定技术上是否可行。这是编辑任务,而不是自动化任务。您使用哪个后端来创建 app 对象?
  • 老实说,我不确定。 |我没有专门设置后端,所以猜测 PyWinAuto mst 使用默认后端?我将更新我的 orig 中的代码列表。发布,以便您可以看到我使用的代码
  • 顺便说一下,我试图访问的控件是 WindowsForms10.LISTBOX 类型的。我们手动将文件拖放到列表框上,文件的路径显示在所述列表框中。我想以编程方式将表示文件路径的字符串添加到列表框。就像你说的,也许这不能完成 - 但我至少想尝试......

标签: python automation ui-automation pywinauto


【解决方案1】:

默认后端是“win32”。但幸运的是,尝试向列表框中添加元素是正确的后端。你可以试试.send_message(LB_ADDSTRING, wParam, 0)wParam 可以在 Microsoft 文档中找到此消息:https://docs.microsoft.com/en-us/windows/win32/controls/lb-addstring

wParam 需要ctypes.create_unicode_buffer(...)ctypes.create_string_buffer(...),具体取决于应用程序是否为 Unicode。

类似调用send_message 的示例可以在pywinauto 源代码中win32_controls.pydef set_edit_text 实现中找到。没那么复杂。

希望对你有帮助。

【讨论】:

  • 可能会遇到另一个技术问题:字符串的内存应该在远程(应用程序)进程中。然后您将需要RemoteMemoryBlock 在目标进程中分配字符串内存。没有它,您可能会面临应用程序崩溃或send_message 失败。脚本退出后可能会发生崩溃,因为分配内存的 Python 进程已经死亡。
  • 我已经向 GitHub 存储库添加了功能请求:github.com/pywinauto/pywinauto/issues/933 但由于其他优先事项,我们可能会在等待 1-2 年后找到时间。
猜你喜欢
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2014-06-18
  • 2017-07-14
相关资源
最近更新 更多