程序退出时更正用户修改的系统时间

来源:互联网 发布:医疗器械g进销存软件 编辑:程序博客网 时间:2024/06/05 15:14
程序运行时运行用户更改系统时间,
但再程序退出时调用函数把系统时间改回到 在原来的系统时间基础上 经过的时间.

        [StructLayout(LayoutKind.Sequential)]
        
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 wMiliseconds;
        }


        [DllImport(
"Kernel32.dll")]
        
public static extern bool SetSystemTime(ref SystemTime sysTime);
        [DllImport(
"Kernel32.dll")]
        
public static extern void GetSystemTime(ref SystemTime sysTime);

        
/// <summary>
        
/// 设置系统时间。
        
/// </summary>

        public void ReSetSystemTime()
        
{
            SystemTime sysTime 
= new SystemTime();

        
// public DateTime ProgramStartTime;
        
// frmMain.ProgramStartTime 在 frmMain_Load 符值:ProgramStartTime = DateTime.Now;
        // public static int sysTickCount;
        // frmMain.sysTickCount 在 frmMain_Load 符值:ProgramStartTime = System.EnvironmentTickCount;                            DateTime DateTimeNow = frmMain.ProgramStartTime.AddTicks(Convert.ToUInt16(System.Environment.TickCount - frmMain.sysTickCount));
            sysTime.wYear 
= Convert.ToUInt16(DateTimeNow.Year);
            sysTime.wMonth 
= Convert.ToUInt16(DateTimeNow.Month);

        
//处置北京时间
            int nBeijingHour = DateTimeNow.Hour - 8;
            
if (nBeijingHour <= 0)
            
{
                nBeijingHour 
+= 24;
                sysTime.wDay 
= Convert.ToUInt16(DateTimeNow.Day - 1);
                sysTime.wDayOfWeek 
= Convert.ToUInt16(DateTimeNow.DayOfWeek - 1);
            }

            
else
            
{
                sysTime.wDay 
= Convert.ToUInt16(DateTime.Now.Day);
                sysTime.wDayOfWeek 
= Convert.ToUInt16(DateTime.Now.DayOfWeek); 
            }



            sysTime.wHour 
= Convert.ToUInt16(nBeijingHour);
            sysTime.wMinute 
= Convert.ToUInt16(DateTimeNow.Minute);
            sysTime.wSecond 
= Convert.ToUInt16(DateTimeNow.Second);
            sysTime.wMiliseconds 
= Convert.ToUInt16(DateTimeNow.Millisecond);

            SetSystemTime(
ref sysTime);
    }

原创粉丝点击