如何通過C#修改Windows操作系統時間


  C#的System.DateTime類提供了對日期時間的封裝,用它進行時間的轉換和處理很方便,但是我沒有在其中找到任何可以用來修改系統時間的成員。用過VC、VB等的朋友可能知道,我們可以調用Win32 API SetLocalTime來改變系統時間,看來C#中也只能如此了。SetLocalTime需要一個SYSTEMTIME結構指針作為參數,這倒不難,我們可以“比葫蘆畫瓢”很快在C#中定義這個結構,但問題是,我同時還想“享受”.NET Framework的System.DateTime在時間轉換和處理方面的便利,怎么辦?只有自己動手了,為我們的C#中的  SYSTEMTIME編寫成員函數,實現和System.DateTime之間的互轉。請看下面的代碼:
  首先我為了以后調用方便,新建了一個C#類庫文件,在里面把SetLocalTime API放到一個名稱為Win32API的類中,並把這個類放到我自己定義的namespace中,避免名稱沖突。以后我還可以不斷向這個類和名稱空間添加常用的API,以便構造我自己的C# Win32 API函數庫。
{
    /// <summary>
    /// 
    /// </summary>
    public struct SYSTEMTIME
    {
        public ushort wYear;
        public ushort wMonth;
        public ushort wDayOfWeek;
        public ushort wDay;
        public ushort wHour;
        public ushort wMinute;
        public ushort wSecond;
        public ushort wMilliseconds;
 
        /// <summary>
        /// 從System.DateTime轉換。
        /// </summary>
        /// <param name="time">System.DateTime類型的時間。</param>
        public void FromDateTime(DateTime time)
        {
            wYear = (ushort)time.Year;
            wMonth = (ushort)time.Month;
            wDayOfWeek = (ushort)time.DayOfWeek;
            wDay = (ushort)time.Day;
            wHour = (ushort)time.Hour;
            wMinute = (ushort)time.Minute;
            wSecond = (ushort)time.Second;
            wMilliseconds = (ushort)time.Millisecond;
        }
        /// <summary>
        /// 轉換為System.DateTime類型。
        /// </summary>
        /// <returns></returns>
        public DateTime ToDateTime()
        {
            return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
        }
        /// <summary>
        /// 靜態方法。轉換為System.DateTime類型。
        /// </summary>
        /// <param name="time">SYSTEMTIME類型的時間。</param>
        /// <returns></returns>
        public static DateTime ToDateTime(SYSTEMTIME time)
        {
            return time.ToDateTime();
        }
    }
 public class Win32API
    {
        [DllImport("Kernel32.dll")]
        public static extern bool SetLocalTime( ref SYSTEMTIME Time );
        [DllImport("Kernel32.dll")]
        public static extern void GetLocalTime(ref SYSTEMTIME Time);
    }
}

然后再需要的地方通過調用如下方法中間的核心代碼來實現修改Windows操作系統時間,例如,通過Button的Click事件實現修改Windows操作系統時間:

private void button1_Click(object sender, System.EventArgs e)
{
    //取得當前系統時間
    DateTime t = DateTime.Now;
    //在當前時間上加上一周
    t = t.AddDays(7);
    //轉換System.DateTime到SYSTEMTIME
    SYSTEMTIME st = new SYSTEMTIME();
    st.FromDateTime(t);
    //調用Win32 API設置系統時間
    Win32API.SetLocalTime(ref st);
    //顯示當前時間
    MessageBox.Show(DateTime.Now.ToString());
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM