zoukankan      html  css  js  c++  java
  • 如何通过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());
    }
     
  • 相关阅读:
    解决VB6.0中不能加载MSCOMCTL.OCX的错误提示
    修改SQL Server数据库表的创建时间简单直接有效的方法
    如何将SQL Server 2000备份的数据库文件还原(升级)为SQL Server 2005或更高版本的数据库?
    如何创建和还原SQL Server 2005数据库?
    SQL Server 2005详细安装过程及配置
    如何创建和还原SQL Server 2000数据库?
    Python接受流式输入
    图的遍历(Python实现)
    Python实现多属性排序
    python构造二维列表以及排序字典
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/13871234.html
Copyright © 2011-2022 走看看