Vous aurez besoin de P/Invoke la SetLocalTime function de l'API de Windows. Déclarer comme ça en C#:
[DllImport("kernel32.dll",CharSet=CharSet.Auto,SetLastError=true)]internalstaticexternboolSetLocalTime(ref SYSTEMTIME lpSystemTime);[StructLayout(LayoutKind.Sequential)]internalstruct SYSTEMTIME
{publicushort wYear;publicushort wMonth;publicushort wDayOfWeek;//ignored for the SetLocalTime functionpublicushort wDay;publicushort wHour;publicushort wMinute;publicushort wSecond;publicushort wMilliseconds;}
Pour régler l'heure, il vous suffit d'initialiser une instance de la SYSTEMTIME structure avec les valeurs appropriées, et appeler la fonction. Exemple de code:
SYSTEMTIME time =new SYSTEMTIME();
time.wDay =1;
time.wMonth =5;
time.wYear =2011;
time.wHour =12;
time.wMinute =15;if(!SetLocalTime(ref time)){//The native function call failed, so throw an exceptionthrownewWin32Exception(Marshal.GetLastWin32Error());}
Toutefois, notez que le processus appelant doit avoir les privilèges appropriés afin d'appeler cette fonction. Dans Windows Vista et les versions ultérieures, cela signifie que vous devrez demander au processus d'élévation.
Sinon, vous pouvez utiliser le SetSystemTime function, qui vous permet de régler l'heure en UTC (Temps Universel Coordonné). La même SYSTEMTIME structure est utilisée, et les deux fonctions sont appelées de manière identique.
.NET ne pas exposer une fonction pour cela, mais vous pouvez utiliser l'API Win32 SetSystemTime (en kernel32.dll) de la méthode. Pour obtenir de l'heure UTC, vous devez utiliser une Protocole NTP Client puis régler l'heure locale en fonction de vos paramètres régionaux.
publicstruct SYSTEMTIME
{publicushort wYear,wMonth,wDayOfWeek,wDay,wHour,wMinute,wSecond,wMilliseconds;}[DllImport("kernel32.dll")]publicexternstaticuintSetSystemTime(ref SYSTEMTIME lpSystemTime);
SYSTEMTIME systime =new SYSTEMTIME();
systime =...//Set the UTC time hereSetSystemTime(ref systime);
Mal. C'est pour le Compact Framework, sous Windows Mobile. La question est marqué "windows xp". Ups, vous avez raison. Corriger maintenant.
Pour obtenir autour de la SE_SYSTEMTIME_NAME question du privilège, essayez de créer une tâche planifiée pour s'exécuter votre application et activez l'option "Exécuter avec des privilèges plus élevés."
Vous aurez besoin de P/Invoke la
SetLocalTime
function de l'API de Windows. Déclarer comme ça en C#:Pour régler l'heure, il vous suffit d'initialiser une instance de la
SYSTEMTIME
structure avec les valeurs appropriées, et appeler la fonction. Exemple de code:Toutefois, notez que le processus appelant doit avoir les privilèges appropriés afin d'appeler cette fonction. Dans Windows Vista et les versions ultérieures, cela signifie que vous devrez demander au processus d'élévation.
Sinon, vous pouvez utiliser le
SetSystemTime
function, qui vous permet de régler l'heure en UTC (Temps Universel Coordonné). La mêmeSYSTEMTIME
structure est utilisée, et les deux fonctions sont appelées de manière identique.OriginalL'auteur Cody Gray
.NET ne pas exposer une fonction pour cela, mais vous pouvez utiliser l'API Win32 SetSystemTime (en kernel32.dll) de la méthode. Pour obtenir de l'heure UTC, vous devez utiliser une Protocole NTP Client puis régler l'heure locale en fonction de vos paramètres régionaux.
Ups, vous avez raison. Corriger maintenant.
OriginalL'auteur Teoman Soygul
Voici quelques articles sur la façon de le faire, compléter avec de l'interrogation d'une horloge atomique pour l'heure correcte.
http://www.codeproject.com/KB/IP/ntpclient.aspx
http://www.codeproject.com/KB/datetime/SNTPClient.aspx
OriginalL'auteur Joel Mueller
Pour obtenir autour de la SE_SYSTEMTIME_NAME question du privilège, essayez de créer une tâche planifiée pour s'exécuter votre application et activez l'option "Exécuter avec des privilèges plus élevés."
OriginalL'auteur Edgar