2

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 モードで変更したいと考えています。それについて私を助けることができますか?

4

2 に答える 2

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);
   } 
}
于 2012-11-25T19:56:06.163 に答える
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 時間形式で設定されます。

年式: 1601-30827

w月: 1-12

wDayOfWeek: 0-6

w日: 1-31

wHour: 0-23

w分:0~59

w秒:0~59

wミリ秒: 0 ~ 999

于 2012-11-25T19:55:56.383 に答える