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:
- 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;
- 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;
- 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;
- 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.