如何用pywinauto实现Windows设置中日期自动同步选项的自动化操作
解决Windows时间同步自动开关的Pywinauto问题
问题分析
你的代码核心问题在于:
- 启动设置窗口后重新调用
connect,导致脱离原应用实例,无法正确操作后续控件 - 导航项的定位和操作方式不准确,没有正确触发页面跳转
修正后的葡萄牙语系统Pywinauto代码
以下代码基于同一个应用实例操作,确保导航和控件交互正确:
from pywinauto import Application from pywinauto.timings import wait_until # 打开系统设置窗口 app = Application(backend="uia").start("control system") main_window = app.window(title_re=".*Configurações.*") # 匹配葡萄牙语设置窗口标题 # 等待左侧导航栏加载,点击「Hora e idioma」 main_window.child_window(title="Hora e idioma", control_type="ListItem").wait('visible', timeout=20).click() # 等待「Data e hora」页面加载,定位自动时间设置复选框 date_time_page = main_window.child_window(title="Data e hora", control_type="Pane") auto_time_checkbox = date_time_page.child_window(title="Definir horário automaticamente", control_type="CheckBox") auto_time_checkbox.wait('visible', timeout=20) # 执行关闭再开启操作 if auto_time_checkbox.get_toggle_state() == 1: # 若当前是开启状态 auto_time_checkbox.click() wait_until(20, 0.5, lambda: auto_time_checkbox.get_toggle_state() == 0) # 等待关闭 auto_time_checkbox.click() wait_until(20, 0.5, lambda: auto_time_checkbox.get_toggle_state() == 1) # 等待开启
更简单的替代方案:直接用命令行同步时间
如果不需要模拟GUI操作,直接执行Windows时间同步命令更高效可靠,无需依赖pywinauto:
import subprocess # 强制同步时间 subprocess.run(["w32tm", "/resync", "/force"], check=True, capture_output=True, text=True) print("时间同步完成")
这个命令会直接调用Windows的时间服务进行同步,比GUI操作更稳定,适合自动化场景。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

