void CDiskInfoDlg::OnButtonGetvol() // 获取驱动器卷标
{
UpdateData(TRUE); // 从控件中更新数据,更新要获取的驱动器名称
char szVolume[MAX_PATH]={0}; // 存放卷标信息的字符数组
if (GetVolumeInformation(m_DiskName,szVolume,MAX_PATH,NULL,NULL,NULL,NULL,0)) // 获取卷标
WriteLog("驱动器%s的卷标=%s",m_DiskName, szVolume); // 记录日志
else // 获取卷标失败
{
if (GetLastError() == ERROR_DEVICE_NOT_CONNECTED) // 检测是否没有插入盘
WriteLog("没有插入盘");
else WriteLog("获取驱动器卷标失败"); // 显示错误提示
}
}
2.获取磁盘序列号
void CDiskInfoDlg::OnButtonGetserial() // 获取磁盘序列号
{
UpdateData(TRUE); // 从控件中更新数据,更新要获取的驱动器名称
DWORD dwSerial; // 存放磁盘序列号的字符数组
if (GetVolumeInformation(m_DiskName,NULL,0,&dwSerial,NULL,NULL,NULL,0)) // 获取磁盘序列号
WriteLog("磁盘%s的磁盘序列号=%X", m_DiskName, dwSerial); // 显示获取的磁盘序列号
else WriteLog("获取驱动器卷标失败");// 显示错误提示
}
3.检测软驱是否有软盘
void CDiskInfoDlg::OnButtonCheckA() // 检测软驱是否有软盘
{
BOOL bResult = FALSE; // 操作结果
DWORD cb = 0; // 输出字节数,此处无实际意义
HANDLE hDevice = NULL; // 设备句柄
hDevice = CreateFile("\\\\.\\A:\\", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_SHARE_WRITE, NULL); // 打开到软驱的连接句柄
if (hDevice != NULL)
{
if (DeviceIoControl((HANDLE) hDevice, IOCTL_STORAGE_CHECK_VERIFY, NULL, 0, NULL, 0,&cb, NULL)) // 检测软驱中是否有软盘
{
WriteLog("软驱中有软盘"); // 输出信息提示
return; // 返回
}
}
WriteLog("软驱中没有软盘"); // 输出信息提示
}
4.判断光驱是否有光盘
void CDiskInfoDlg::OnButtonCheckcdrom() // 判断光驱是否有光盘
{
DWORD dwReturn;
char strDrivers[MAX_PATH];
dwReturn = GetLogicalDriveStrings(MAX_PATH, (LPSTR)&strDrivers);
CString log;
for (int i = 0;i < (int)dwReturn; i++)
{
if ((strDrivers[i] <= 'Z') && (strDrivers[i] >= 'A'))
{
CString driver;
driver.Format("%c:\\", strDrivers[i]);
UINT type = GetDriveType(driver);
if (type == DRIVE_CDROM) // 如果是光驱
{
int bResult = GetVolumeInformation(driver, NULL, 0, NULL, NULL, NULL, NULL, 0);
CString info;
if (bResult == 0)
{
info.Format("光驱%c中没有光盘\r\n", strDrivers[i]);
}
else
{
info.Format("光驱%c中有光盘\r\n", strDrivers[i]);
}
log += info;
}
}
}
WriteLog(log);
}
5。断驱动器类型
void CDiskInfoDlg::OnButtonGetmediatype() // 判断驱动器类型
{
UpdateData(TRUE); // 从控件中更新数据,更新要获取的驱动器名称
CString csType; // 存放驱动器类型的字符串
UINT uiType = GetDriveType(m_DiskName); // 获取驱动器类型
switch (uiType) // 根据返回值判断驱动器类型
{
case DRIVE_UNKNOWN:
csType = "驱动器类型不能确定。";
break;
case DRIVE_NO_ROOT_DIR:
csType = "指定的根目录不存在。";
break;
case DRIVE_REMOVABLE:
csType = "可移动的存储器。";
break;
case DRIVE_FIXED:
csType = "固定的驱动器,也就是通常所说的磁盘。";
break;
case DRIVE_REMOTE:
csType = "远程驱动器,也称为网络驱动器。";
break;
case DRIVE_CDROM:
csType = "CD-ROM驱动器";
break;
case DRIVE_RAMDISK:
csType = "内存驱动器,驱动器将内存的一部分划分出来当作硬盘使用。";
break;
default:
csType = "未知";
}
WriteLog("驱动器%s的类型返回值=%d(%s)", m_DiskName, uiType, csType); // 显示操作信息
}
6.获取磁盘空间信息
void CDiskInfoDlg::OnButtonGetfreespace() // 获取磁盘空间信息
{
UpdateData(TRUE); // 从控件中更新数据,更新要获取的磁盘名称
DWORD lSPC,lBPS,lNOFC,lTNOC; // 存放磁盘空间的变量
if (GetDiskFreeSpace(m_DiskName,&lSPC, &lBPS, &lNOFC, &lTNOC)) // 获取磁盘空间信息
WriteLog("%s盘的磁盘空间情况:\r\n空闲字节数=%d;每柱面包含的扇区数=%d; \
\r\n每扇区包含的字节数=%d;空闲柱面数=%d;总柱面数=%d.", m_DiskName, lSPC*lBPS*lNOFC, lSPC, lBPS, lNOFC, lTNOC); // 显示获取的磁盘空间信息
else WriteLog("获取磁盘空间信息失败");// 显示错误提示
}