这里获取的序列号是卷的序列号,主要用API函数读取。
API函数介绍:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // 硬盘的路径
LPTSTR lpVolumeNameBuffer, // 硬盘的卷标
DWORD nVolumeNameSize, // 卷标的字符串长度
LPDWORD lpVolumeSerialNumber, // 硬盘的序列号
LPDWORD lpMaximumComponentLength, // 最大的文件长度
LPDWORD lpFileSystemFlags, // 文件系统的一此标志
LPTSTR lpFileSystemNameBuffer, // 存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize // 分区类型的长指针变量所指向的字符串长度
);
code:
#include<windows.h>
#include <string>
#pragma comment(lib, "Iphlpapi.lib")
using namespace std;
int main()
{
LPCTSTR lpRootPathName = "c:\\"; //这里取的是C盘,要取哪个盘更改路径就行
LPTSTR lpVolumeNameBuffer = new char[12];
DWORD nVolumeNameSize = 12; // 卷标的字符串长度
DWORD VolumeSerialNumber; //硬盘序列号
DWORD MaximumComponentLength;// 最大的文件长度
LPTSTR lpFileSystemNameBuffer = new char[10];//存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize = 10;//分区类型的长指针变量所指向的字符串长度
DWORD FileSystemFlags;
GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber, &MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);
printf("Hard Disk ID Is: %x",VolumeSerialNumber);
getchar();
return 0;
}
运行代码就可以得到所需要的卷的序列号了
需要注意的地方:我用的是VS2013编译运行的,有个地方需要改一下才不会报错
找到项目右键选择属性——配置属性——常规——字符集——选择使用多字节字符集。