是否有一个Windows API可以达到相当于单击“日期和时间属性”/“Internet时间”选项卡中的“立即更新”按钮(通过双击任务栏中的时钟打开)?
有没有办法监视Windows何时触发时间同步以及何时成功或失败?
答案 0 :(得分:8)
时间服务没有公开API,但要触发时间同步,您可以使用w32tm
命令行工具。
在C / C ++中你可以这样做:
include <process.h>
...
system("w32tm /resync /nowait");
请查看w32tm documentation以获取更多选项。
答案 1 :(得分:2)
这似乎有效:
using System;
using System.Runtime.InteropServices;
namespace ClockResync
{
class Program
{
[DllImport("w32time.dll")]
public static extern uint W32TimeSyncNow([MarshalAs(UnmanagedType.LPWStr)]String computername, bool wait, uint flag);
static void Main(string[] args)
{
Console.WriteLine(W32TimeSyncNow("computername", true, 8).ToString());
Console.ReadLine();
}
}
}
它没有文档,所以我不确定可能的标志是什么,但8似乎做得很好 - 用我的系统时钟测试。如果您运行的是Windows 64位,则编译为64位,否则您将获得访问冲突异常。
W32TimeQueryStatus
应该能够获得最后一次成功的同步时间。当我有更多时间时,我会继续努力。