获得磁盘驱动器号GetLogicalDriveStrings,HeapAlloc



::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!");
}






CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
pList->ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);
pList->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
pList->InsertColumn(0, _T("驱动器名"), LVCFMT_LEFT, 100);
pList->InsertColumn(1, _T("驱动器类型"), LVCFMT_LEFT, 100);
pList->InsertColumn(2, _T("驱动器卷标"), LVCFMT_LEFT, 100);
pList->InsertColumn(3, _T("驱动器序列号"), LVCFMT_LEFT, 100);
pList->InsertColumn(4, _T("驱动器文件系统"), LVCFMT_LEFT, 100);
pList->InsertColumn(5, _T("可用空间"), LVCFMT_LEFT, 100);
pList->InsertColumn(6, _T("总共空间"), LVCFMT_LEFT, 100);


CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
pList->DeleteAllItems();




//获得驱动器位掩码
DWORD dwBitMask = ::GetLogicalDrives();
if (dwBitMask != 0)
{
int n = 0;




TCHAR ch = 'A';




while (dwBitMask > 0)
{
if (dwBitMask % 2 == 1)
{
//驱动器名
CString strDiriveName = _T("");
strDiriveName.Format(_T("%c:\\"), ch);
pList->InsertItem(n, strDiriveName);




//获得驱动器类型
UINT nDriveType = GetDriveType(strDiriveName);
CString strDiriveType = _T("");
if (nDriveType == DRIVE_UNKNOWN)
{
strDiriveType = _T("未知");
}
else if (nDriveType == DRIVE_NO_ROOT_DIR)
{
strDiriveType = _T("无效路径");
}
else if (nDriveType == DRIVE_REMOVABLE)
{
strDiriveType = _T("可移动驱动器");
}
else if (nDriveType == DRIVE_FIXED)
{
strDiriveType = _T("固定驱动器");
}
else if (nDriveType == DRIVE_REMOTE)
{
strDiriveType = _T("远程(网络)驱动器");
}
else if (nDriveType == DRIVE_CDROM)
{
strDiriveType = _T("CDROM驱动器");
}
else if (nDriveType == DRIVE_RAMDISK)
{
strDiriveType = _T("RAM磁盘");
}
pList->SetItemText(n, 1, strDiriveType);


//获得驱动器卷标
CString strVolumeName = _T("");
GetVolumeInformation(strDiriveName, strVolumeName.GetBuffer(1024),
1024, NULL, NULL, NULL, NULL, 0);
strVolumeName.ReleaseBuffer();
pList->SetItemText(n, 2, strVolumeName);


//获得驱动器序列号
DWORD dwSerialNumber = 0;
CString strVolumeName = _T("");
GetVolumeInformation(strDiriveName, NULL,
0, &dwSerialNumber, NULL, NULL, NULL, 0);
CString strSerialNumber = _T("");
strSerialNumber.Format(_T("%04X-%04X"), 
HIWORD(dwSerialNumber), LOWORD(dwSerialNumber));
pList->SetItemText(n, 3, strSerialNumber);

//获得驱动器文件系统
CString strFileSystemName = _T("");
GetVolumeInformation(strDiriveName, NULL, 0, NULL, NULL, NULL, 
strFileSystemName.GetBuffer(1024), 1024);
strFileSystemName.ReleaseBuffer();
pList->SetItemText(n, 1, strFileSystemName);

//获得磁盘空间信息
ULARGE_INTEGER FreeBytes;
ULARGE_INTEGER TotalBytes;
if (!GetDiskFreeSpaceEx(strDiriveName, &FreeBytes,
&TotalBytes, NULL))
{
return;
}


UINT nFreeSize = (UINT)(FreeBytes.QuadPart / 1024 / 1024);
UINT nTotalSize = (UINT)(TotalBytes.QuadPart / 1024 / 1024);


CString strText = _T("");
strText.Format(_T("%d MB"), nFreeSize);
pList->SetItemText(n, 5, strText);
strText.Format(_T("%d MB"),nTotalSize);
pList->SetItemText(n, 6, strText);

n++;
}




dwBitMask /= 2;




ch++;
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值