系统相关功能开发(一)-获取磁盘信息

1.获取驱动器卷标

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("获取磁盘空间信息失败");// 显示错误提示
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值