Versione C# (convertita da un convertitore automatico):
codice:
public class DateTimeEdit
{
	[Runtime.InteropServices.DllImport("kernel32.dll")]
	private static bool SetSystemTime(ref APISystemTime SystemTime)
	{
	}
	[DebuggerStepThrough()]
	public static void SetSystemDateTime(System.DateTime NewDate)
	{
		if (!SetSystemTime(new APISystemTime(NewDate))) throw new System.ComponentModel.Win32Exception(); 
	}
	private struct APISystemTime
	{
		public UInt16 wYear;
		public UInt16 wMonth;
		public UInt16 wDayOfWeek;
		public UInt16 wDay;
		public UInt16 wHour;
		public UInt16 wMinute;
		public UInt16 wSecond;
		public UInt16 wMilliseconds;
		public APISystemTime(System.DateTime Value)
		{
			Value = Value.ToUniversalTime();
			wYear = System.Convert.ToUInt16(Value.Year);
			wMonth = System.Convert.ToUInt16(Value.Month);
			wDayOfWeek = System.Convert.ToUInt16(Value.DayOfWeek);
			wDay = System.Convert.ToUInt16(Value.Day);
			wHour = System.Convert.ToUInt16(Value.Hour);
			wMinute = System.Convert.ToUInt16(Value.Minute);
			wSecond = System.Convert.ToUInt16(Value.Second);
			wMilliseconds = System.Convert.ToUInt16(Value.Millisecond);
		}
	}
}
.
Per usarla ti basta passare al metodo statico SetSystemDateTime un oggetto DateTime che contenga la nuova data e ora.
codice:
DateTimeEdit.SetSystemDateTime(New DateTime(2007, 05, 28, 20, 15, 00)); //Imposta la data del sistema sul 28 Maggio 2007, ore 20.15.00
La classe funziona in questo modo:
  1. quando richiami SetSystemDateTime tale metodo inizializza una struttura temporanea APISystemTime, che è la struttura usata dalla API SetSystemTime per memorizzare la data e l'ora di sistema, richiamandone il costruttore;
  2. il costruttore di APISystemTime imposta i campi della struttura sulla base della struttura System.DateTime (struttura usata all'interno del .NET Framework per memorizzare data e ora) che gli viene passata;
  3. SetSystemDateTime passa la struttura così inizializzata alla funzione privata SetSystemTime, che altro non è che uno stub che richiama l'omonima API della dll kernel32.dll, che si occupa di fatto di impostare la data e l'ora di sistema;
  4. la SetSystemTime, se qualcosa è andato storto, restituisce false; in questo caso SetSystemDateTime solleva un'eccezione Win32Exception, che automaticamente recupera i dati dell'ultimo errore che si è verificato durante le chiamate alle API.