Вам потребуется P / Invoke для функции SetLocalTime
из Windows API. Объявите это так в C #:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime);
[StructLayout(LayoutKind.Sequential)]
internal struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek; // ignored for the SetLocalTime function
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
Чтобы установить время, вы просто инициализируете экземпляр структуры SYSTEMTIME
с соответствующими значениями и вызываете функцию. Пример кода:
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 exception
throw new Win32Exception(Marshal.GetLastWin32Error());
}
Однако обратите внимание, что вызывающий процесс должен иметь соответствующие привилегии для вызова этой функции. В Windows Vista и более поздних версиях это означает, что вам придется запрашивать повышение прав процесса.
В качестве альтернативы, вы можете использовать функцию SetSystemTime
, которая позволяет вам установить время в UTC (Всемирное координированное время). Используется та же самая структура SYSTEMTIME
, и две функции вызываются одинаковым образом.