在电脑连接网络相机时,需要将连接的电脑本机作为 NTP 时钟源,才能使网络相机同步到时间。主要需要下面三个步骤:
- 修改注册表。将 NTP 服务器打开,并将本机设为可信时钟源。
- 重启 w32Time 服务,并将该服务设置为自动,即开机自启动。
- 关闭防火墙。
Python 代码可以实现该功能,具体代码如下:
import os
import ctypes
import winreg
def admin():
aa=ctypes.windll.shell32.IsUserAnAdmin()
return aa
def restart_w32Time():
os.system("net stop w32time")
os.system("net start w32time")
print("\n[2] w32time已重启\n")
def set_w32Time_auto():
os.system("sc config w32Time start=AUTO")
print("\n[3] w32Time设置为自动启动\n")
def close_firewall():
os.system("netsh advfirewall set currentprofile state off")
os.system("netsh advfirewall set domainprofile state off")
os.system("netsh advfirewall set privateprofile state off")
print("\n[4] 防火墙已关闭\n")
if admin() == 1:
access_registry = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
access_key = winreg.OpenKey(access_registry, r"SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer", 0, winreg.KEY_ALL_ACCESS)
winreg.SetValueEx(access_key, "Enabled", 0, winreg.REG_DWORD, 1) # 开启NTP服务
winreg.FlushKey(access_key)
# print("Enabled:", winreg.QueryValueEx(access_key, "Enabled")[0])
access_key = winreg.OpenKey(access_registry, r"SYSTEM\CurrentControlSet\Services\W32Time\Config", 0, winreg.KEY_ALL_ACCESS)
winreg.SetValueEx(access_key, "AnnounceFlags", 0, winreg.REG_DWORD, 5) # 设置本机为可信时钟源
winreg.FlushKey(access_key)
# print("AnnounceFlags:", winreg.QueryValueEx(access_key, "AnnounceFlags")[0])
print("\n[1] 注册表修改成功\n")
restart_w32Time() # 重启w32Time服务
set_w32Time_auto() # 设置w32Time服务自动启动
close_firewall() # 关闭防火墙
else:
print("请以管理员身份运行")