void CDeviceVolDlg::OnGetDeviceVol(void)
{
TCHAR namebuf[12];
TCHAR sysnamebuf[10];
DWORD namesize=12;
DWORD sysnamesize=10;
DWORD serialnumber;
DWORD maxlen;
DWORD fileflag;
DWORD dwSize;
m_DeviceList.DeleteAllItems();
//获取驱动器信息
dwSize = ::GetLogicalDriveStrings(0, NULL);
if (dwSize>0)
{
HANDLE heap=::GetProcessHeap();
LPTSTR lp=(LPTSTR)HeapAlloc(heap, HEAP_ZERO_MEMORY, dwSize*sizeof(TCHAR));
::GetLogicalDriveStrings(dwSize*sizeof(TCHAR), lp);
while(*lp!=0)
{
UINT res=::GetDriveType(lp);
if(res==DRIVE_FIXED)
m_DeviceList.InsertItem(0,lp,0);
lp=_tcschr(lp,0)+1;
}
}
int num = m_DeviceList.GetItemCount();
for (int i=0; i<num; i++)
{
CString str,temp;
str = m_DeviceList.GetItemText(i, 0);
//逻辑盘的序列号
::GetVolumeInformation(str, namebuf, namesize, &serialnumber, &maxlen, &fileflag, sysnamebuf, sysnamesize);
//temp.Format(_T("%s"), namebuf);
//m_DeviceList.SetItemText(i, 1, temp);
temp.Format(_T("%d"), serialnumber);
m_DeviceList.SetItemText(i, 1, temp);
temp.Format(_T("%s"), sysnamebuf);
m_DeviceList.SetItemText(i, 2, temp);
ULARGE_INTEGER nFreeBytesAvailable;
ULARGE_INTEGER nTotalNumberOfBytes;
ULARGE_INTEGER nTotalNumberOfFreeBytes;
//获取磁盘空间
if (GetDiskFreeSpaceEx(str, &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes))
{
temp.Format(_T("%u G"), nTotalNumberOfBytes.QuadPart/(1024*1024*1024));
m_DeviceList.SetItemText(i, 3, temp);
temp.Format(_T("%u G"), nFreeBytesAvailable.QuadPart/(1024*1024*1024));
m_DeviceList.SetItemText(i, 4, temp);
}
}
}