2012-11-25 1 views
2

나는 다음과 같은 내 시스템 날짜를 변경하는 SYSTEMTIME 구조체를 사용24 모드에서 날짜 및 시간을 변경할 수 SYSTEMTIME을 사용

[DllImport("kernel32.dll")] 
public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime); 

private void button1_Click(object sender, EventArgs e) 
{ 
    SYSTEMTIME st = new SYSTEMTIME(); 
    st.wYear = 2009; 
    st.wMonth = 1; 
    st.wDay = 1; 
    st.wHour = 23; 
    st.wMinute = 1; 
    st.wSecond = 1; 
    SetSystemTime(ref st); 
} 

날짜가 변경 되었으나 시간 내 시스템을 변경하려는 을 초래하지 않습니다 24 모드에서 날짜와 시간. 저에 대해 저를 도울 수 있습니까?

+0

SYSTEMTIME 구조 정의를 표시 할 수 있습니까? pinvoke.net에서 가져 왔니? –

+0

'SetSystemTime'의 반환 값은 무엇입니까? –

답변

0

SYSTEMTIME은 다음과 같아야합니다

typedef struct _SYSTEMTIME { 
    WORD wYear; 
    WORD wMonth; 
    WORD wDayOfWeek; 
    WORD wDay; 
    WORD wHour; 
    WORD wMinute; 
    WORD wSecond; 
    WORD wMilliseconds; 
} SYSTEMTIME, *PSYSTEMTIME; 

SetSystemTime() 성공에 true를 반환한다.

시간은 24 시간 형식으로 설정됩니다.

wYear : 1601-30827

wMonth : 1-12

wDayOfWeek : 0-6

wDay : 1-31

wHour : 0-23

wMinute : 0-59

wSecond : 0-59

wMilliseconds :이 재현 할 수없는 999

1

. 아래의 매우 간단한 콘솔 응용 프로그램을 사용하면 중 하나 일 수도 있습니다. 아무런 조치도 취하지 않습니다. (정상적으로 실행되며 상승 된 권한이 없음) 또는 날짜와 시간을 모두 변경할 수 있습니다 (관리자 권한으로 실행). 그것은 단지 날짜를 변경하지 않았습니다. 그러나 UAC를 사용할 수있는 Windows 7에 있습니다. 다른 버전으로 실행 중이거나 다른 액세스 제어로 실행 중입니까? 나는 이것이 이것이 접근 제어 문제라고 강력히 생각한다.

using System; 
using System.Runtime.InteropServices; 

[StructLayout(LayoutKind.Sequential)] 
struct SYSTEMTIME 
{ 
    [MarshalAs(UnmanagedType.U2)] public short Year; 
    [MarshalAs(UnmanagedType.U2)] public short Month; 
    [MarshalAs(UnmanagedType.U2)] public short DayOfWeek; 
    [MarshalAs(UnmanagedType.U2)] public short Day; 
    [MarshalAs(UnmanagedType.U2)] public short Hour; 
    [MarshalAs(UnmanagedType.U2)] public short Minute; 
    [MarshalAs(UnmanagedType.U2)] public short Second; 
    [MarshalAs(UnmanagedType.U2)] public short Milliseconds; 
} 

class Test 
{ 
    [DllImport("kernel32.dll")] 
    public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime); 

    static void Main() 
    { 
     SYSTEMTIME st = new SYSTEMTIME(); 
     st.Year = 2009; 
     st.Month = 1; 
     st.Day = 1; 
     st.Hour = 23; 
     st.Minute = 1; 
     st.Second = 1; 
     SetSystemTime(ref st); 
    } 
}