获得磁盘驱动器号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++;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值