国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在C#中改變系統時間 && 得到系統時間改變通知

2024-07-21 02:15:46
字體:
來源:轉載
供稿:網友

一、改變系統時間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函數庫j//forproc_win32.cs//對常用win32 api函數及結構的聲明using system;using system.runtime.interopservices; namespace farproc.win32{    /// <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);    }}下面在winform程序中調用。新建一個c# winform程序,在form上添加一個按鈕 button1,并添加如下代碼: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());}然后就可以運行這個程序看到效果了。 二、得到系統時間改變通知另一個問題,如果系統時間被人為改動了,我的程序想得到通知,并做相應的處理,怎么辦?好像很難,呵呵,其實framework早為我們準備好了。比起上一個問題,這個似乎還要簡單一些。在microsoft.win32命名空間中有一個systemevents類,我們只要定制它的一個靜態事件timechanged就ok了!!代碼片斷如下:private void form1_load(object sender, system.eventargs e){    //定制事件    systemevents.timechanged += new eventhandler(systemevents_timechanged);}//事件處理函數private void systemevents_timechanged(object sender, eventargs e){    messagebox.show("系統時間被改變了,現在時間為:" + datetime.now.tostring());}注意,這個事件在console程序中是無效的,可能是因為這個事件本身要依賴窗口和窗口消息吧。 另外,建議大家仔細看看microsoft.win32命名空間中的所有內容,還有許多有用的東西呢!!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇庆市| 南溪县| 萨迦县| 阳泉市| 洮南市| 长泰县| 井冈山市| 浙江省| 应用必备| 郸城县| 安宁市| 保定市| 济宁市| 夏邑县| 兴国县| 虹口区| 瓦房店市| 阿鲁科尔沁旗| 黄陵县| 陇川县| 浏阳市| 逊克县| 瑞丽市| 深水埗区| 泸州市| 柘荣县| 德庆县| 德兴市| 蓬安县| 财经| 高阳县| 宜章县| 阿克苏市| 西峡县| 洮南市| 通山县| 四川省| 贞丰县| 搜索| 堆龙德庆县| 城口县|