2010-05-05 25 views
9

¿Existe una API de Windows que permita lograr el equivalente a hacer clic en el botón "Actualizar ahora" en la "fecha y hora propiedades" TAB/"tiempo de Internet" (abierto haciendo doble clic en el reloj en la barra de tareas)?API de Windows para activar la sincronización de tiempo

¿Hay una manera de controlar cuando la sincronización de tiempo se desencadena por las ventanas y cuando tiene éxito o no?

Respuesta

7

No hay API expuestas por el servicio de tiempo, pero para disparar una sincronización de tiempo puede utilizar la herramienta de línea de comandos w32tm.

En C/C++ se puede hacer algo como esto:

include <process.h> 

... 

system("w32tm /resync /nowait"); 

Tome un vistazo a w32tm documentation para más opciones.

+0

No es exactamente lo que necesitaba, pero mejor que nada. ¡Gracias! –

+0

¡Gracias a un millón! –

1

Esto parece funcionar:

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

Se indocumentado así que no estoy exactamente seguro de lo que los posibles banderas son, pero 8 parece hacer el trabajo muy bien - probado con mi reloj del sistema. Si está ejecutando Windows de 64 bits, compile para 64 bits o obtendrá excepciones de violación de acceso.

W32TimeQueryStatus debería ser capaz de obtener la última vez sincronización correcta. Trabajaré en eso cuando tenga más tiempo.

Cuestiones relacionadas