2010-05-05 8 views
9

Esiste un'API di Windows che otterrebbe l'equivalente di fare clic sul pulsante "Aggiorna ora" nella scheda "Proprietà di data e ora"/"Ora Internet" (aperta facendo doppio clic sull'orologio in la barra delle applicazioni)?per attivare la sincronizzazione dell'ora

C'è un modo per monitorare quando la sincronizzazione dell'ora viene attivata da Windows e quando ha esito positivo o negativo?

risposta

7

Non esiste alcuna API esposta dal servizio orario, ma per attivare una sincronizzazione dell'ora è possibile utilizzare lo strumento da riga di comando w32tm.

In C/C++ si può fare qualcosa di simile:

include <process.h> 

... 

system("w32tm /resync /nowait"); 

Date un'occhiata a w32tm documentation per altre possibilità.

+0

Non esattamente quello di cui avevo bisogno, ma meglio di niente. Grazie! –

+0

Grazie mille! –

1

Questo sembra funzionare:

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

E 'documentato quindi non sono esattamente sicuro di quello che i possibili bandiere sono, ma 8 sembra fare il lavoro bene - testato con il mio orologio di sistema. Se stai eseguendo Windows a 64 bit, esegui la compilazione per 64 bit o riceverai eccezioni di violazione di accesso.

W32TimeQueryStatus dovrebbe essere in grado di ottenere l'ultimo tempo di sincronizzazione riuscito. Ci lavorerò quando avrò più tempo.