//显示本地服务器磁盘信息到List
VOID CFileManagerDlg::FixedServerVolumeInformation()
{
//磁盘信息
char VolumeList[0x500] = { 0 };
//游走指针
CHAR *Travel = NULL;
//清空一下列表
m_CList_Dialog_File_Manager_Server_Show.DeleteAllItems();
while (m_CList_Dialog_File_Manager_Server_Show.DeleteColumn(0) != 0);
//初始化列表信息
m_CList_Dialog_File_Manager_Server_Show.InsertColumn(0, "名称", LVCFMT_CENTER, 45);
m_CList_Dialog_File_Manager_Server_Show.InsertColumn(1, "类型", LVCFMT_CENTER, 80);
m_CList_Dialog_File_Manager_Server_Show.InsertColumn(2, "文件系统", LVCFMT_CENTER,85);
m_CList_Dialog_File_Manager_Server_Show.InsertColumn(3, "总大小", LVCFMT_CENTER, 100);
m_CList_Dialog_File_Manager_Server_Show.InsertColumn(4, "可用空间", LVCFMT_CENTER,100);
//设置列表可选
m_CList_Dialog_File_Manager_Server_Show.SetExtendedStyle(LVS_EX_FULLROWSELECT);
//读取本地磁盘信息
GetLogicalDriveStrings(sizeof(VolumeList), (LPSTR)VolumeList);
Travel = VolumeList;
//文件系统类型
CHAR FileSystem[MAX_PATH];
unsigned __int64 HardDiskAmount = 0;
unsigned __int64 HardDiskFreeSpace = 0;
unsigned long HardDiskAmountMB = 0; // 总大小
unsigned long HardDiskFreeSpaceMB = 0; // 剩余空间
for (int i = 0; *Travel != '\0'; i++, Travel += lstrlen(Travel) + 1)
{
memset(FileSystem, 0, sizeof(FileSystem));
// 文件系统信息及大小
GetVolumeInformation(Travel, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH);
ULONG FileSystemLength = lstrlen(FileSystem) + 1;
//磁盘空间信息
if (GetDiskFreeSpaceEx(Travel, (PULARGE_INTEGER)&HardDiskFreeSpace, (PULARGE_INTEGER)&HardDiskAmount, NULL))
{
HardDiskAmountMB = HardDiskAmount / 1024 / 1024;
HardDiskFreeSpaceMB = HardDiskFreeSpace / 1024 / 1024;
}
else
{
HardDiskAmountMB = 0;
HardDiskFreeSpaceMB = 0;
}
//盘符名称 顺便获得系统的图标
int iItem = m_CList_Dialog_File_Manager_Server_Show.InsertItem(i, Travel, GetServerIconIndex(Travel, GetFileAttributes(Travel)));
//设置隐藏数据 1代表文件夹 0代表文件
m_CList_Dialog_File_Manager_Server_Show.SetItemData(iItem, 1);
//文件系统
m_CList_Dialog_File_Manager_Server_Show.SetItemText(iItem, 2, FileSystem);
//磁盘信息 为本地磁盘还是外部存储
SHFILEINFO sfi;
SHGetFileInfo(Travel, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
m_CList_Dialog_File_Manager_Server_Show.SetItemText(iItem, 1, sfi.szTypeName);
CString v1;
v1.Format("%10.1f GB", (float)HardDiskAmountMB / 1024);
m_CList_Dialog_File_Manager_Server_Show.SetItemText(iItem, 3, v1);
v1.Format("%10.1f GB", (float)HardDiskFreeSpaceMB / 1024);
m_CList_Dialog_File_Manager_Server_Show.SetItemText(iItem, 4, v1);
}
}
//获得本地系统盘符图标
int CFileManagerDlg::GetServerIconIndex(LPCTSTR Volume, DWORD FileAttributes)
{
SHFILEINFO sfi;
if (FileAttributes == INVALID_FILE_ATTRIBUTES)
FileAttributes = FILE_ATTRIBUTE_NORMAL;
else
FileAttributes |= FILE_ATTRIBUTE_NORMAL;
SHGetFileInfo
(
Volume,
FileAttributes,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES
);
return sfi.iIcon;
}