如何用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
相关产品推荐
相关产品推荐

