基于pywinauto的共享目录文件排序自动化问题咨询
解决方案
一、判断目录文件是否按名称排序
提取当前文件列表
先定位到共享目录窗口的文件列表控件(通常为ListView类型),提取所有文件的名称:from pywinauto import Application app = Application().connect(path="explorer.exe") target_window = app.window(title="你的共享目录窗口标题") # 替换为实际窗口标题 file_list = target_window.ListView # 获取所有文件名称 current_file_names = [item.text() for item in file_list.items()]对比排序状态
生成匹配Windows资源管理器默认规则的排序参考列表,和当前列表对比:# 按不区分大小写规则排序(和Windows默认排序逻辑一致) sorted_file_names = sorted(current_file_names, key=lambda x: x.lower()) # 判断是否已排序 if current_file_names == sorted_file_names: print("文件已按名称排序") else: print("文件未按名称排序,需触发排序操作")
二、跟踪控件是否已被点击过
方法1:通过控件UI状态判断
表头列点击后会显示排序箭头(↑/↓),可通过控件属性或文本标识判断:
# 定位到名称列表头控件(替换为你的控件实际标识符,比如automation_id) name_header = target_window.child_window(automation_id="名称列控件ID") # 检查控件文本是否包含排序箭头 header_text = name_header.text() if "↑" in header_text or "↓" in header_text: print("名称列已被点击过(处于排序状态)") else: name_header.click() print("已点击名称列触发排序")
方法2:自定义变量记录状态
如果控件状态不易检测,直接用变量跟踪点击行为:
is_header_clicked = False if not is_header_clicked: name_header.click() is_header_clicked = True print("首次点击名称列排序") else: print("名称列已点击过,无需重复操作")
方法3:检查控件选中状态
部分表头控件点击后会处于选中状态,可通过is_selected()判断:
if name_header.is_selected(): print("名称列已被选中(已点击过)") else: name_header.click() print("已点击名称列")
内容的提问来源于stack exchange,提问作者Vimlesh Kumar
相关产品推荐
相关产品推荐

