修改本地系统时间
首先需要导入System.Runtime.InteropServices
这个命名空间.
using System.Runtime.InteropServices;
然后我们通过GetSystemTime
方法获取系统时间,再通过SetSystemTime
方法修改系统时间.
[DllImport("Kernel32.dll")]
public extern static void GetSystemTime(ref SYSTEMTIME Time);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime(ref SYSTEMTIME st);
// 获取系统时间
SYSTEMTIME sys = new SYSTEMTIME();
GetSystemTime(ref sys);
// 修改系统时间,假设我们将时间修改为2022年3月26日 19:00:00
sys.wYear = 2022;
sys.wMonth = 3;
sys.wDay = 26;
sys.wHour = 19;
sys.wMinute = 0;
sys.wSecond = 0;
SetSystemTime(ref sys);
这里我们定义了一个SYSTEMTIME
结构体来存储时间信息,它包含了年、月、日、时、分、秒等字段。GetSystemTime
方法将当前系统时间赋值到sys
结构体中,我们可以直接修改这个结构体的字段来修改时间,然后通过SetSystemTime
方法将修改后时间信息应用到系统中。
获取硬盘序列号
我们可以利用GetVolumeInformation
函数来获取硬盘序列号,先定义一个GetVolumeInformation
函数.
[DllImport("Kernel32.dll")]
public unsafe static extern bool GetVolumeInformation(
string lpRootPathName, // 指定要检索的根目录(注意:指定盘符,比如下面的 "C:\")
IntPtr lpVolumeNameBuffer, // 接收文件系统名称指针,一般为null即可
uint nVolumeNameSize, // lpVolumeNameBuffer的长度
ref uint lpVolumeSerialNumber, // 接收卷序列号
ref uint lpMaximumComponentLength, // 接收指定文件系统名称所支持的最大文件长度(暂不关心,指定为0即可)
ref uint lpFileSystemFlags, // 接收指定文件系统的属性标志(也暂不关心,为0即可)
IntPtr lpFileSystemNameBuffer, // 接收用户指定的文件系统名称的名称指针(该项一般为 null)
uint nFileSystemNameSize // lpFileSystemNameBuffer 的长度。
);
然后调用函数获取硬盘序列号即可。
// 获取硬盘序列号
uint volumeSerialNumber = 0;
string drive = "C:\\"; // 获取C盘硬盘序列号
GetVolumeInformation(drive, IntPtr.Zero, 0, ref volumeSerialNumber, ref maxComponentLen, ref fileSysemFlags, IntPtr.Zero, 0);
// 打印硬盘序列号
Console.WriteLine($"C盘硬盘序列号:{volumeSerialNumber}");
这里我们只获取了C盘硬盘序列号,其他盘符同理需要替换drive
变量值即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#利用win32 Api 修改本地系统时间、获取硬盘序列号 - Python技术站