Windows API触发时间同步

时间:2010-05-05 09:47:24

标签: windows time synchronization ntp

是否有一个Windows API可以达到相当于单击“日期和时间属性”/“Internet时间”选项卡中的“立即更新”按钮(通过双击任务栏中的时钟打开)?

有没有办法监视Windows何时触发时间同步以及何时成功或失败?

2 个答案:

答案 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应该能够获得最后一次成功的同步时间。当我有更多时间时,我会继续努力。