You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pywinauto无法访问Kleopatra弹出的子窗口如何解决

问题描述

控件标识符

控件标识截图
使用pywinauto实现Kleopatra应用文件解密流程自动化时,可正常连接访问主窗口元素,但无法捕获操作触发的弹出新窗口。
需要访问标题为Select One or More Files to Decrypt and/or Verify的新窗口,在窗口中选择待解密/验证的文件。
初始实现代码运行报错,代码如下:

import pywinauto
app = pywinauto.application.Application(backend='uia').start(r"C:\Program Files (x86)\Gpg4win\bin\kleopatra.exe").connect(title="kleopatra",timeout=100)

fileMenu = app.kleopatra.child_window(title="File", auto_id="MainWindow#1.file.file", control_type="MenuItem").wrapper_object()

fileMenu.click_input()

# app.kleopatra.print_control_identifiers()

decryptMenu = app.kleopatra.child_window(title="Decrypt/Verify...", auto_id="KXMLGUIClient-KActionCollection.file_decrypt_verify_files", control_type="MenuItem")

decryptMenu.click_input()

selectFileWindow = pywinauto.application.Application(backend='uia').connect(title = "Select One or More Files to Decrypt and/or Verify")

报错信息

报错截图


解决方法

连接弹窗失败的核心原因有两点:

  • 点击解密菜单后没有预留窗口加载时间,执行connect逻辑时弹窗还未完成渲染,无法匹配到对应窗口
  • 不需要新建Application实例连接弹窗:该文件选择窗口属于Kleopatra主进程,直接复用已绑定主程序的app对象等待弹窗即可,新建实例容易出现进程匹配错误

修复后的参考代码:

import pywinauto

# 启动并连接Kleopatra主程序
app = pywinauto.Application(backend='uia').start(
    r"C:\Program Files (x86)\Gpg4win\bin\kleopatra.exe"
).connect(title="kleopatra", timeout=100)

# 点击文件菜单
app.kleopatra.child_window(
    title="File",
    auto_id="MainWindow#1.file.file",
    control_type="MenuItem"
).click_input()

# 点击解密/验证选项
decrypt_menu = app.kleopatra.child_window(
    title="Decrypt/Verify...",
    auto_id="KXMLGUIClient-KActionCollection.file_decrypt_verify_files",
    control_type="MenuItem"
)
decrypt_menu.click_input()

# 等待文件选择弹窗加载可见,超时时间设置为10秒
select_file_dlg = app.window(
    title="Select One or More Files to Decrypt and/or Verify",
    control_type="Window",
    timeout=10
)
select_file_dlg.wait('visible')

# 后续可直接操作弹窗内元素,以下为示例:填入目标文件路径后点击打开按钮
file_path_edit = select_file_dlg.child_window(title="文件名(N):", control_type="Edit")
file_path_edit.set_edit_text(r"C:\path\to\your\encrypted\file.gpg")
select_file_dlg.child_window(title="打开(O)", control_type="Button").click_input()

如果上述方法仍无法定位窗口,可在点击解密菜单后执行print([w.window_text() for w in app.windows()]),打印当前主进程下所有顶层窗口的标题,核对弹窗实际标题是否存在多语言适配、字符拼写偏差,部分中文环境下窗口标题可能显示为本地化文本,而非默认英文标题。


内容的提问来源于stack exchange,提问作者user19029187

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 17:47:37