利用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());

}

以上是 利用C#修改Windows操作系统时间 的全部内容, 来源链接: utcz.com/z/352781.html

回到顶部