【问题标题】:How to interact with a window's GUI with Python?如何使用 Python 与窗口的 GUI 交互?
【发布时间】:2023-03-30 18:25:01
【问题描述】:

假设您要打开myapp.exe,打开第三个菜单,然后选择第二个菜单项(即就像用户使用键盘或鼠标所做的那样),然后在对话框窗口中选择第二个按钮。

pyahkpyautogui 似乎提供了这一点,但以一种相当“低级”的方式,通过模拟点击:

pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')

如何使用 Python 以更高级别的方式与 Windows GUI 进行交互?

例子:

window = gui.open('myapp.exe')
window.menu_open(3).choose_item(2)
child_window = window.wait_for_dialog()
child_window.buttons[1].click()

【问题讨论】:

  • 我不相信这样的方法存在......您必须将一个程序附加到另一个程序,并且能够阅读和解释什么是“按钮”或“项目”,尽管主机程序用任意语言编写。同样,许多程序不允许将其他程序附加到它们,因为这是您利用和破解主机程序中的漏洞的方式。
  • @Reedinationer 是不是有一个统一的方式来浏览windows(列出所有顶级的hWnd
  • pywinauto 是否如您所愿?看起来它比你提到的其他库更高级。
  • @RandomDavis 看起来很棒!我认为您可以将其发布为答案,还是您更喜欢我这样做?
  • @Basj 我发布了一个答案。很高兴我能帮上忙。

标签: python windows user-interface winapi


【解决方案1】:

pywinauto 似乎更符合您的需求 - 它利用 Win32 API 和 MS UI 自动化等。

以下是记事本应用程序自动化的示例:

from pywinauto.application import Application
app = Application().start("notepad.exe")

app.UntitledNotepad.menu_select("Help->About Notepad")
app.AboutNotepad.OK.click()
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

【讨论】:

  • 这正是我想要的,太棒了!
  • 我可以修改当前正在运行的应用程序而不是启动它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多