欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

利用C#修改Windows操作系统时间

时间:2021-06-30 09:20:10|栏目:.NET代码|点击:

  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#中动态显示当前系统时间的实例方法

栏    目:.NET代码

下一篇:关于vs2005、vs2008和vs2010项目互转的总结

本文标题:利用C#修改Windows操作系统时间

本文地址:http://www.codeinn.net/misctech/150128.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有