利用C#修改Windows操作系統(tǒng)時(shí)間
C#的System.DateTime類提供了對(duì)日期時(shí)間的封裝,用它進(jìn)行時(shí)間的轉(zhuǎn)換和處理很方便,但是我沒(méi)有在其中找到任何可以用來(lái)修改系統(tǒng)時(shí)間的成員。用過(guò)VC、VB等的朋友可能知道,我們可以調(diào)用Win32 API SetLocalTime來(lái)改變系統(tǒng)時(shí)間,看來(lái)C#中也只能如此了。SetLocalTime需要一個(gè)SYSTEMTIME結(jié)構(gòu)指針作為參數(shù),這倒不難,我們可以“比葫蘆畫瓢”很快在C#中定義這個(gè)結(jié)構(gòu),但問(wèn)題是,我同時(shí)還想“享受”.NET Framework的System.DateTime在時(shí)間轉(zhuǎn)換和處理方面的便利,怎么辦?只有自己動(dòng)手了,為我們的C#中的 SYSTEMTIME編寫成員函數(shù),實(shí)現(xiàn)和System.DateTime之間的互轉(zhuǎn)。請(qǐng)看下面的代碼:
首先我為了以后調(diào)用方便,新建了一個(gè)C#類庫(kù)文件,在里面把SetLocalTime API放到一個(gè)名稱為Win32API的類中,并把這個(gè)類放到我自己定義的namespace中,避免名稱沖突。以后我還可以不斷向這個(gè)類和名稱空間添加常用的API,以便構(gòu)造我自己的C# Win32 API函數(shù)庫(kù)。
{ /// <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轉(zhuǎn)換。 /// </summary> /// <param name="time">System.DateTime類型的時(shí)間。</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> /// 轉(zhuǎn)換為System.DateTime類型。 /// </summary> /// <returns></returns> public DateTime ToDateTime() { return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds); } /// <summary> /// 靜態(tài)方法。轉(zhuǎn)換為System.DateTime類型。 /// </summary> /// <param name="time">SYSTEMTIME類型的時(shí)間。</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); } }
然后再需要的地方通過(guò)調(diào)用如下方法中間的核心代碼來(lái)實(shí)現(xiàn)修改Windows操作系統(tǒng)時(shí)間,例如,通過(guò)Button的Click事件實(shí)現(xiàn)修改Windows操作系統(tǒng)時(shí)間:
private void button1_Click(object sender, System.EventArgs e) { //取得當(dāng)前系統(tǒng)時(shí)間 DateTime t = DateTime.Now; //在當(dāng)前時(shí)間上加上一周 t = t.AddDays(7); //轉(zhuǎn)換System.DateTime到SYSTEMTIME SYSTEMTIME st = new SYSTEMTIME(); st.FromDateTime(t); //調(diào)用Win32 API設(shè)置系統(tǒng)時(shí)間 Win32API.SetLocalTime(ref st); //顯示當(dāng)前時(shí)間 MessageBox.Show(DateTime.Now.ToString()); }
以上就是利用C#修改Windows操作系統(tǒng)時(shí)間的詳細(xì)內(nèi)容,更多關(guān)于c# 修改系統(tǒng)時(shí)間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c# 實(shí)現(xiàn)打印機(jī)狀態(tài)查詢與阻塞打印
這篇文章主要介紹了c# 引用System.Management來(lái)實(shí)現(xiàn)對(duì)打印機(jī)狀態(tài)的查詢,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-05-05用C#在本地創(chuàng)建一個(gè)Windows帳戶(DOS命令)
用C#在本地創(chuàng)建一個(gè)Windows帳戶(DOS命令)...2007-03-03分析C# Dictionary的實(shí)現(xiàn)原理
對(duì)于C#中的Dictionary類相信大家都不陌生,這是一個(gè)Collection(集合)類型,可以通過(guò)Key/Value(鍵值對(duì)的形式來(lái)存放數(shù)據(jù);該類最大的優(yōu)點(diǎn)就是它查找元素的時(shí)間復(fù)雜度接近O(1)。那么什么樣的設(shè)計(jì)能使得Dictionary類實(shí)現(xiàn)O(1)的時(shí)間復(fù)雜度呢2021-06-06C#對(duì)象為Null模式(Null Object Pattern)實(shí)例教程
這篇文章主要介紹了C#對(duì)象為Null模式(Null Object Pattern),以一個(gè)簡(jiǎn)單實(shí)例深入分析了C#為Null情況下的處理方法,需要的朋友可以參考下2014-09-09C# 通過(guò)NI-VISA操作Tektronix TBS 2000B系列示波器的實(shí)現(xiàn)步驟
這篇文章主要介紹了C# 通過(guò)NI-VISA操作Tektronix TBS 2000B系列示波器的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02