您的位置:首页 > 其它

获得磁盘驱动器号GetLogicalDriveStrings,HeapAlloc

2011-09-27 15:16 991 查看
::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++;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: