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
должен иметь возможность получить последнее успешное время синхронизации. Я поработаю над этим, когда у меня будет больше времени.