分享
 
 
 

[原创]在C#中改变系统时间 && 得到系统时间改变通知

王朝c#·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

本文章为该blog(blog.csdn.net/uoyevoli/)主人 uoyevoli 原创(作者个人网站: www.farproc.com),如果转载,请注明出处,谢谢!! 2005-8-5

一、改变系统时间

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命名空间中的所有内容,还有许多有用的东西呢!!

2005-8-5

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有