195上位机VC MFC获取硬盘的容量大小
195上位机VC MFC获取硬盘的容量大小 功能展示 前面例程已有介绍磁盘知识,我们当前例程再来实现当前系统全部有效磁盘大小的获取,程序启动时就初始化获取系统的全部磁盘及每个磁盘的大小,并显示在列表框中,效果如图; 要点提示 系统全部盘符的获取可以用函数GetLogicalDriveStrings()函数具体的使用已在前一例程介绍; 指定盘符获取可以用函数GetDiskFreeSpaceEx(); 原型为: BOOL GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName, PULARGE_INTEGERlpFreeBytesAvailableToCaller, PULARGE_INTEGERlpTotalNumberOfBytes, PULARGE_INTEGERlpTotalNumberOfFreeBytes); 返回值: Long,非零表示成功,零表示失败。可调用GetLastError()查看错误代码; 参数 类型及说明: lpRootPathName String,不包括卷名的磁盘根路径名 lpFreeBytesAvailableToCaller LARGE_INTEGER,指定一个变量,用于容纳调用者可用的字节数量 lpTotalNumberOfBytes LARGE_INTEGER,指定一个变量,用于容纳磁盘上的总字节数 lpTotalNumberOfFreeBytes LARGE_INTEGER,指定一个变量,用于容纳磁盘上可用的字节数 实现功能 1.新建基于对话框的应用程序 2.拖拽一列表控件ID为IDC_LIST1,在主对话框中初始化函数OnInitDialog()中添加代码,实现磁盘大小获取功能 - CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST1);//列表控件的指针
- pListCtrl->SetExtendedStyle(LVS_EX_GRIDLINES);//网格属性
- pListCtrl->ModifyStyle(0,LVS_REPORT);//报表属性
- pListCtrl->InsertColumn(0,"磁盘驱动器",LVCFMT_LEFT,150);
- pListCtrl->InsertColumn(1,"驱动器大小",LVCFMT_LEFT,150);
- m_Imglist.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);
- m_Imglist.Add(::AfxGetApp()->LoadIcon(IDI_ICON1));
- pListCtrl->SetImageList(&m_Imglist,LVSIL_SMALL);
- //<>//插入盘符
- DWORD size=::GetLogicalDriveStrings(0,NULL);
- if(size!=0)
- {
- HANDLE heap=::GetProcessHeap();
- LPSTR lp=(LPSTR)HeapAlloc(heap,HEAP_ZERO_MEMORY,size*sizeof(TCHAR));
- ::GetLogicalDriveStrings(size*sizeof(TCHAR),lp);
- while(*lp!=0)
- {
- pListCtrl->InsertItem(0,lp,0);
- lp=_tcschr(lp,0)+1;
- }
- }
-
复制代码- //<>计算每盘符空间大小
- ULARGE_INTEGER totalsize;
- ULARGE_INTEGER freesize;
- ULARGE_INTEGER availablesize;
- int num=pListCtrl->GetItemCount();
- for(int i=0;i<num;i++)
- {
- CString str,temp;
- str=pListCtrl->GetItemText(i,0);
- if(::GetDiskFreeSpaceEx(str,&totalsize,&freesize,&availablesize) )
- {
- temp.Format("%ld MB",totalsize.QuadPart/1048576);
- pListCtrl->SetItemText(i,1,temp);
- }
- }
复制代码m_Imglist为自定义添加的CImageList类型变量,IDI_ICON1为磁盘用图标 我们来演示下功能实现的整个过程
|