首页 > 代码库 > 实例365(2)---------调用系统api修改系统时间

实例365(2)---------调用系统api修改系统时间

一:截图

二:代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace SetDate
{
    public partial class Frm_Main : Form
    {
        public Frm_Main()
        {
            InitializeComponent();
        }

        public class SetSystemDateTime//自定义类SetSystemDateTime,用于设置系统日期,为了使用DllImportAttribute类(DllImportAttribute类是指可以将属性应用于方法,
            //并由非托管动态链接库(DLL)作为静态入口点公开),
            //需要引入命名空间:using System.Runtime.InteropServices;
        {
            [DllImportAttribute("Kernel32.dll")]//使用包含要导入的方法的 DLL 的名称初始化 DllImportAttribute 类的新实例。
            public static extern void GetLocalTime(SystemTime st);//C#要设置系统时间必须要调用Win32的API,而其中相关的函数就是SetSystemTime(), GetSystemTimer(), SetLocalTime(), GetLocalTime(),
            //这似乎是用VC写的函数,在VC++中是可以直接调用的。
            //对于这两个函数,其输入参数必须是一个下面这样的结构体,其成员变量类型必须是ushort,成员变量不能改变顺序。
            [DllImportAttribute("Kernel32.dll")]
            public static extern void SetLocalTime(SystemTime st);
        }

        [StructLayoutAttribute(LayoutKind.Sequential)]
        public class SystemTime//自定义类SystemTime用于定义日期类
        {
            public ushort vYear;//
            public ushort vMonth;//
            public ushort vDayOfWeek;//星期
            public ushort vDay;//
            public ushort vHour;//小时
            public ushort vMinute;//
            public ushort vSecond;//
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = DateTime.Now.ToString("F") +//得到系统时间
                "  " + DateTime.Now.ToString("dddd");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("您真的确定更改系统当前日期吗?",//设置系统当前日期时间
                "信息提示", MessageBoxButtons.OK) == DialogResult.OK)
            {
                DateTime Year = this.dateTimePicker1.Value;//得到时间信息

                SystemTime MySystemTime = new SystemTime();//创建系统时间类的对象

                SetSystemDateTime.GetLocalTime(MySystemTime);//得到系统时间

                MySystemTime.vYear = (ushort)this.dateTimePicker1.Value.Year;//设置年
                MySystemTime.vMonth = (ushort)this.dateTimePicker1.Value.Month;//设置月
                MySystemTime.vDay = (ushort)this.dateTimePicker1.Value.Day;//设置日
                MySystemTime.vHour = (ushort)this.dateTimePicker2.Value.Hour;//设置小时
                MySystemTime.vMinute = (ushort)this.dateTimePicker2.Value.Minute;//设置分
                MySystemTime.vSecond = (ushort)this.dateTimePicker2.Value.Second;//设置秒

                SetSystemDateTime.SetLocalTime(MySystemTime);//设置系统时间
                button1_Click(null, null);//执行按钮点击事件
            }
        }
    }
}