2010-08-02 9 views
5

Jaki jest najlepszy sposób ustawienia czasu maszyny w języku C#?Ustaw czas maszyny C#

+0

DUP? http://stackoverflow.com/questions/204936/set-time-programmatically-using-c – kenny

+0

@kenny: Nie sądzę, że ... chodzi o zdalne maszyny. –

+0

Ten komentarz nie jest dokładnym duplikatem, ponieważ pyta, jak to zrobić na zdalnym komputerze. –

Odpowiedz

7

Prawdopodobnie będziesz musiał użyć Win32 API, aby to zrobić, ponieważ jestem dość pewny nic pieczony w ramy:

[StructLayout(LayoutKind.Sequential)] 
public struct SYSTEMTIME { 
public short wYear; 
public short wMonth; 
public short wDayOfWeek; 
public short wDay; 
public short wHour; 
public short wMinute; 
public short wSecond; 
public short wMilliseconds; 
} 
[DllImport("kernel32.dll", SetLastError=true)] 
public static extern bool SetSystemTime(ref SYSTEMTIME theDateTime); 

Jest pełniejsza przykład w PInvoke.net kod trochę gęsty , ale prosty fragment to dość proste do odczytania i zrozumienia jest to:

SYSTEMTIME st = new SYSTEMTIME(); 
GetSystemTime(ref st); 
// Adds one hour to the time that was retrieved from GetSystemTime 
st.wHour = (ushort)(st.wHour + 1 % 24); 
var result = SetSystemTime(ref st); 
if (result == false) 
{ 
    // Something went wrong 
} 
else 
{ 
    // The time will now be 1hr later than it was previously 
} 

odpowiednie specyficzne Win32 API są SetSystemTime, GetSystemTime i strukturę SYSTEMTIME.

+2

Tak jak w pojedynku, będziesz potrzebować uprawnień administratora, aby ustawić czas systemowy. Standardowy użytkownik nie może zmienić godziny. – Joshua

+1

@Joshua, bardzo prawdziwe, +1 – Rob

+0

Zdefiniowałeś SetSystemTime, aby zwrócił wartość bool, ale sprawdź, czy wynik == 0. –

1

Microsoft.VisualBasic.DateAndTime.TimeOfDay = dateTime;

Dodaj odwołanie z Microsoft.VisualBasic do projekcji Proszę dać mi znać, jeśli każdej kwestii