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

如何用pywinauto访问索引选项中高级按钮打开的高级选项窗口

解决无法访问索引选项高级窗口及获取控件标识符的问题

点击索引选项中的“高级”按钮后,无法访问弹出的“高级选项”窗口,也无法获取该窗口的控件标识符,以下是我编写的代码:

from pywinauto import Application, findwindows, mouse , Desktop    
from pywinauto.timings import wait_until, TimeoutError
import time
from datetime import datetime
from time import sleep
from colorama import Fore, Back, Style, init 
import subprocess

# Opening indexing options

command = "control.exe srchadmin.dll"

subprocess.run(command, shell=True)

sleep(2)

#app = Application(backend="uia").connect(title="Indexing Options", found_index=0)
app = Application(backend='uia').connect(title='Indexing Options')

#access the child window advanced options opened thru click and open advanced options
indexing_options = app.window(title = 'Indexing Options')
#indexing_options.print_control_identifiers()
indexing_options.child_window(auto_id = '407').click()

try:
    advanced_options_window = Desktop(backend="uia")['Advanced Options']
    wait_until(10, 1, lambda: advanced_options_window.exists())

    # Print all the elements in the 'Advanced Options' window
    advanced_options_window.print_control_identifiers()

except TimeoutError:
    print("The 'Advanced Options' window did not appear.")

finally:
    # Close the Indexing Options window
    indexing_options.close()

可能的解决方向:

  • 确认窗口归属
    弹出的“高级选项”窗口大概率属于同一个应用进程,无需用Desktop跨进程查找,直接从已连接的app实例中获取。可以在点击按钮后执行print(app.windows()),查看所有关联窗口的标题,确认目标窗口是否在列表中。

  • 优化等待逻辑
    替换固定sleep为pywinauto的内置等待方法,比如window.wait('visible', timeout=10),避免因系统响应慢导致窗口未加载完成就执行后续操作。

  • 尝试不同后端
    部分系统控件对uia和win32后端的支持有差异,切换到win32后端尝试连接和查找窗口:

    app = Application(backend='win32').connect(title='Indexing Options', timeout=10)
    
  • 检查运行权限
    索引选项的高级设置窗口可能需要管理员权限,右键以管理员身份运行脚本,确保进程有足够权限访问该窗口。

  • 调整窗口查找方式
    尝试结合标题和类名查找窗口,类名可通过Spy++工具获取:

    advanced_options_window = app.window(title='Advanced Options', class_name='#32770')
    

修改后的示例代码:

from pywinauto import Application
from pywinauto.timings import TimeoutError
import subprocess

# 打开索引选项
command = "control.exe srchadmin.dll"
subprocess.run(command, shell=True)

# 连接到索引选项窗口,使用win32后端
app = Application(backend='win32').connect(title='Indexing Options', timeout=10)
indexing_options = app.window(title='Indexing Options')

# 点击高级按钮
indexing_options.child_window(auto_id='407').click()

try:
    # 等待高级选项窗口可见并获取
    advanced_options_window = app.window(title='Advanced Options').wait('visible', timeout=10)
    # 打印控件标识符
    advanced_options_window.print_control_identifiers()

except TimeoutError:
    print("'高级选项'窗口未出现,请检查权限或尝试切换后端")

finally:
    # 关闭索引选项窗口
    indexing_options.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:22:05