Pergunta

Is there a windows API that would achieve the equivalent of clicking the "Update now" button in the "Date and time properties"/"Internet time" tab (opened by double clicking the clock in the taskbar)?

Is there a way to monitor when the time synchronization is triggered by windows and when it succeeds or fails?

Foi útil?

Solução

There is no API exposed by the time service, but to trigger a time synchronization you can use the w32tm command line tool.

In C/C++ you can do something like this:

include <process.h>

...

system("w32tm /resync /nowait");

Take a look at w32tm documentation for further options.

Outras dicas

This seems to work:

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();
        }
    }
}

It's undocumented so I'm not exactly sure what the possible flags are, but 8 seems to do the job just fine - tested with my system clock. If you're running Windows 64-bit, compile for 64-bit or you'll be getting access violation exceptions.

W32TimeQueryStatus should be able to get the last successful sync time. I'll work on that when I have more time.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top