Windows API для запуска синхронизации времени

есть ли API windows, который достиг бы эквивалента нажатия кнопки "Обновить сейчас"на вкладке"свойства даты и времени"/ "время Интернета" (открывается двойным щелчком по часам на панели задач)?

есть ли способ контролировать, когда синхронизация времени запускается windows, и когда это удается или не удается?

2 ответов


нет API, предоставляемого службой времени, но для запуска синхронизации времени вы можете использовать w32tm инструмент командной строки.

В C/C++ можно сделать что-то вроде этого:

include <process.h>

...

system("w32tm /resync /nowait");

посмотри документация команду w32tm дополнительные параметры.


Это, кажется, работает:

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, похоже, делает работу просто отлично протестирована с моими системными часами. Если вы используете 64-разрядную версию Windows, скомпилируйте для 64-разрядной версии или получите исключения нарушения прав доступа.

W32TimeQueryStatus должен иметь возможность получить последнее успешное время синхронизации. Я поработаю над этим, когда у меня будет больше времени.