C#利用win32 Api 修改本地系统时间、获取硬盘序列号

C#利用win32 Api 修改本地系统时间、获取硬盘序列号,可以用于软件注册机制的编写!


using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace Fengyun

{

    public class Win32

    {

        #region 修改本地系统时间

        [DllImport("Kernel32.dll")]

        private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

        [DllImport("Kernel32.dll")]

        private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);

        [StructLayout(LayoutKind.Sequential)]

        private 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>

        /// 将本地时间与sqlserver服务器时间同步

        /// </summary>

        /// <param name="SqlServerTime">时间</param>

        public static void SetTime(DateTime SqlServerTime)

        {

            SYSTEMTIME st = new SYSTEMTIME();

            st.wYear = Convert.ToUInt16(SqlServerTime.Year);

            st.wMonth = Convert.ToUInt16(SqlServerTime.Month);

            st.wDay = Convert.ToUInt16(SqlServerTime.Day);

            st.wHour = Convert.ToUInt16(SqlServerTime.Hour);

            st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);

            st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);

            st.wSecond = Convert.ToUInt16(SqlServerTime.Second);

            SetLocalTime(ref st);

        }

        #endregion

        #region 获取硬盘序列号

        [DllImport("kernel32.dll")]

        private static extern int GetVolumeInformation(

        string lpRootPathName,

        string lpVolumeNameBuffer,

        int nVolumeNameSize,

        ref int lpVolumeSerialNumber,

        int lpMaximumComponentLength,

        int lpFileSystemFlags,

        string lpFileSystemNameBuffer,

        int nFileSystemNameSize

        );

        /// <summary>

        /// 获取硬盘序列号

        /// </summary>

        /// <param name="drvID">硬盘盘符[c|d|e|....]</param>

        /// <returns></returns>

        public static string GetDiskVolume(string drvID)

        {

            const int MAX_FILENAME_LEN = 256;

            int retVal = 0;

            int lpMaximumComponentLength = 0;

            int lpFileSystemFlags = 0;

            string lpVolumeNameBuffer = null;

            string lpFileSystemNameBuffer = null;

            int i = GetVolumeInformation(

            drvID + @":\",

            lpVolumeNameBuffer,

            MAX_FILENAME_LEN,

            ref retVal,

            lpMaximumComponentLength,

            lpFileSystemFlags,

            lpFileSystemNameBuffer,

            MAX_FILENAME_LEN

            );

            return retVal.ToString("x");

        }

        #endregion

    }

}

以上就是本文所分享的代码的全部内容了,希望对大家学习C#能有所帮助。