C#利用win32 Api 修改本地系統(tǒng)時間、獲取硬盤序列號
更新時間:2015年03月11日 16:08:23 投稿:hebedich
這篇文章主要介紹了C#利用win32 Api 修改本地系統(tǒng)時間、獲取硬盤序列號的方法及代碼分享,需要的朋友可以參考下
C#利用win32 Api 修改本地系統(tǒng)時間、獲取硬盤序列號,可以用于軟件注冊機制的編寫!
復(fù)制代碼 代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Fengyun
{
public class Win32
{
#region 修改本地系統(tǒng)時間
[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服務(wù)器時間同步
/// </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
}
}
以上就是本文所分享的代碼的全部內(nèi)容了,希望對大家學(xué)習(xí)C#能有所幫助。
相關(guān)文章
C#實現(xiàn)掃描局域網(wǎng)內(nèi)的所有IP和端口
這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)掃描局域網(wǎng)內(nèi)的所有IP和端口的功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則的示例詳解
在面向?qū)ο缶幊讨?,SOLID?是五個設(shè)計原則的首字母縮寫,旨在使軟件設(shè)計更易于理解、靈活和可維護。本文將通過實例詳細講講C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則,需要的可以參考一下2022-07-07