Sí. Puede leer el Windows Event Logs y buscar cambios en la hora del sistema. (Los cambios de tiempo del sistema son uno de los eventos del sistema que se registran automáticamente.) Por ejemplo, acabo de ajustar la hora del sistema unos segundos y aparece lo siguiente en el registro del evento del sistema:
Información 10/21/2011 11:16:26 AM Kernel-General 1 Ninguno
La hora del sistema ha cambiado a 2011 - 10 - 21T16: 16: 26.000000000Z de 2011 - 10 - 21T16: 16: 26.000000000Z.
Puede use the Win32 API to get access to the event logs luego consultar estos eventos para determinar si la hora fue efectivamente modificada. Lo mejor de esta solución es que está incorporada y siempre en ejecución. No es necesario supervisar los eventos a través de un servicio personalizado, etc. Solo debe consultar los datos del sistema operativo.
Esto todavía no es una solución a prueba de balas ya que las personas con derechos de administrador pueden tener la posibilidad de configuración, registros claros, etc. Pero sin dudas sería laico a prueba de su aplicación. Los registros de eventos del sistema no son algo que los usuarios habituales de Windows piensen.
El XML para ese evento en particular: (sin identificación de la seguridad privacidad &)
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Kernel-General"
Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" />
<EventID>1</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000010</Keywords>
<TimeCreated SystemTime="2011-10-21T16:16:26.001000000Z" />
<EventRecordID>138478</EventRecordID>
<Correlation />
<Execution ProcessID="40044" ThreadID="50016" />
<Channel>System</Channel>
<Computer>xxxxx.xxxxxxxxx.org</Computer>
<Security UserID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
</System>
<EventData>
<Data Name="NewTime">2011-10-21T16:16:26.000000000Z</Data>
<Data Name="OldTime">2011-10-21T16:16:26.000000000Z</Data>
</EventData>
</Event>
posible duplicado de [¿Hay un evento de API para cuando la persona cambia el reloj en Windows?] (Http://stackoverflow.com/questions/756506/is-herehere-an-api-event-for-when-person- changes-clock-on-windows) –
Estaría muy, muy sorprendido si hubiera una manera de hacer esto. Además, no es un engaño (la pregunta explícitamente dice "sin' WM_TIMECHANGE' "). – Jon
No creo que sea un duplicado, ya que estoy buscando para encontrar si hay una manera de detectar un cambio después del hecho. Las otras preguntas son sobre detectar un cambio cuando sucede. –