Cambiar valores de fecha y hora de Windows desde el programa

Podría no ser este un ejemplo del API de Windows en sentido estricto, lo incluyo por dos motivos, se utiliza una variable del tipo TsystemTime, que contiene los valores que se ven en el ejemplo. No obstante, toma los datos sin más de la estructura SystemTime, que sí pertenece al API, y lo transforma a un tipo Register que es el que utilizamos en este caso. Nos hubiese dado el mismo resultado con cualquier de las dos formas.

Además, cuando comprobamos la validez de la fecha, utilizamos SetSystemTime y este sí es propiamente de Windows y se dirige a la estructura citada para comprobar que los datos son posibles.

procedure TForm1.Button1Click(Sender: TObject);

var
  fecha:TSystemTime;
begin
  fecha.wyear:=2000;
  fecha.wMonth:=12;
  fecha.wDayofWeek:=1;
  fecha.wDay:=31;
  fecha.wHour:=15;
  Fecha.wMinute:=30;
  Fecha.wSecond:=0;
  Fecha.wMilliseconds:=0;
  if not SetSystemTime(Fecha) then
     showmessage('Error de cambio de fecha-hora');
end;

Por lo tanto, en este ejemplo habríamos modificado la fecha al 31-12-00, aceptamos que es domingo (el día 1 para Delphi, por el denominado efecto USA) y la hora sería las 15.30