当前位置: 源码素材网 » VC++教程 » 详情页

VC++ 获取驱动器序列号

  •   时间:2019-08-01
  • 概述:驱动器 序列号

本例介绍如何获得计算机中所有驱动器的序列号,编译并运行本例程序,如图所示。通过驱动器列表选择要获得序列号的驱动器,然后单击【获得驱动器序列号】按钮,弹出显示该驱动器序列号的对话框。

VC++ 获取驱动器序列号运行截图

实现方法:GetLogicalDriveStrings 函数可以获得标明所有驱动器的字符串。其定义如下:

DWORD GetLogicalDriveStrings(
DWORD nBufferLength, //字符串的大小
LPTSTR lpBuffer //指向标明驱动器的字符串
);

通过第二个参数返回的字符串可以获得驱动器,该字符串的格式大致如下:

c:\<null>d:\<null><null>

 而GetVolumeInformation 函数则可以获得某个特定驱动器的序列号,其定义如下:

BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, //文件系统的根目录字符串地址
LPTSTR lpVolumeNameBuffer, //驱动器名称
DWORD nVolumeNameSize, //驱动器名称字符串的大小
LPDWORD lpVolumeSerialNumber, //驱动器序列号
LPDWORD lpMaximumComponentLength, //系统最大文件名长度
LPDWORD lpFileSystemFlags, //文件系统标记
LPTSTR lpFileSystemNameBuffer, //文件系统名称
DWORD nFileSystemNameSize //文件系统名称字符串长度
);

程序代码的编写:
(1)通过AppWizard 生成基于对话框的应有程序DrvSrlNmbr。
(2)增加CCombBox 下拉列表框控件,用来列出所有驱动器。
(3)给对话框增加一个函数FindAllDrivers(),用来获得所有驱动器,并将这些驱动器加到列表框中,其定义如下:

void CDrvSrlNmbrDlg::FindAllDrivers()
{
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
DWORD dwNumBytesForDriveStrings; //实际存储驱动器号的字符串长度
HANDLE hHeap;
LPSTR lp;
CString strLogdrive;
//获得实际存储驱动器号的字符串长度
dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)*sizeof(TCHAR);
//如果字符串不为空,则表示有正常的驱动器存在
if (dwNumBytesForDriveStrings!=0) {
//分配字符串空间
hHeap=GetProcessHeap();
lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,
dwNumBytesForDriveStrings);
//获得标明所有驱动器的字符串
GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);
//将驱动器逐个放到下拉列表中
while (*lp!=0) {
Driver->AddString(lp);
lp=_tcschr(lp,0)+1;
}
}
else
AfxMessageBox("Can’t Use The Function GetLogicalDriveStrings!");
}

(4)更改对话框的OnInitialUpdate 函数,调用FindAllDrivers()函数,获得所有驱动器。其代码如下:

BOOL CDrvSrlNmbrDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//其他初始化代码
//⋯⋯
//列出所有驱动器
FindAllDrivers();
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
Driver->SetCurSel(0);
return TRUE;
}

(5)给对话框增加获得下拉列表指定驱动器序列号的按钮【获得驱动器序列号】,其响应函数如下:

void CDrvSrlNmbrDlg::OnGetSrlNum()
{
//更新下拉列表的驱动器号
UpdateData(TRUE);
//获得下拉列表的指针对象
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
//获得当前选择的驱动器
CString strRootPathName;
Driver->GetWindowText(strRootPathName);
//获得驱动器序列号
LPCTSTR lpRootPathName = strRootPathName;
LPTSTR lpVolumeNameBuffer=new char[12];
DWORD nVolumeNameSize=12;
DWORD VolumeSerialNumber;
DWORD MaximumComponentLength;
DWORD FileSystemFlags;
LPTSTR lpFileSystemNameBuffer=new char[10];
DWORD nFileSystemNameSize=10;
GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);
//显示驱动器序列号
CString str;
str.Format("驱动器%s 的序列号为%x",strRootPathName,VolumeSerialNumber);
AfxMessageBox(str);
}

    相关声明:

      若“VC++ 获取驱动器序列号”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。