2010-05-05 5 views
9

Gibt es eine Windows-API, die das Äquivalent zum Klicken auf die Schaltfläche "Jetzt aktualisieren" auf der Registerkarte "Datums- und Uhrzeiteigenschaften"/"Internetzeit" (durch Doppelklicken auf die Uhr geöffnet) erreicht die Taskleiste)?Windows-API zum Auslösen der Zeitsynchronisierung

Gibt es eine Möglichkeit zu überwachen, wann die Zeitsynchronisierung von Windows ausgelöst wird und wann es erfolgreich ist oder fehlschlägt?

Antwort

7

Es gibt keine API, die vom Zeitdienst verfügbar gemacht wird, aber um eine Zeitsynchronisierung auszulösen, können Sie das Befehlszeilenprogramm w32tm verwenden.

In C/C++ Sie etwas tun können:

include <process.h> 

... 

system("w32tm /resync /nowait"); 

Werfen Sie einen Blick auf w32tm documentation für weitere Optionen.

+0

Nicht genau was ich brauchte, aber besser als nichts. Vielen Dank! –

+0

Danke eine Million! –

1

Dies scheint zu funktionieren:

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

Es undokumentiert ist so bin ich nicht ganz sicher, was die möglichen Flags sind, aber 8 scheint die Arbeit zu tun einfach gut - getestet mit meinem Systemuhr. Wenn Sie Windows 64-Bit ausführen, kompilieren Sie für 64-Bit, oder Sie erhalten Zugriffsverletzungsausnahmen.

W32TimeQueryStatus sollte in der Lage sein, die letzte erfolgreiche Synchronisierungszeit zu erhalten. Ich werde daran arbeiten, wenn ich mehr Zeit habe.

Verwandte Themen