磁盘查看器
可查看盘符、标题、文件系统、总空间、可用空间、概述内容。
1.新建windows项目,并设置工程属性
2.在源文件夹下新建.cpp文件
3.在资源文件夹下添加资源 Dialog
4.添加List Control工具,并将属性->试图设置为Report
5.代码部分
#include<windows.h>
#include<tchar.h>
#include<stdio.h>
#include<CommCtrl.h>
#include<windowsx.h>
#include"resource.h"
//创建模态对话框
INT_PTR CALLBACK DlgBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, TCHAR* szCmdLine, int nCmdShow)
{
//创建模态对话框
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgBoxProc);
return 0;
}
INT_PTR CALLBACK DlgBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG://对话框的初始化消息,是WM_INITDIALOG,而不是WM_CREATE
{
HWND hList = GetDlgItem(hWnd, IDC_LIST1);
TCHAR buf[6][20] =
{
_T("盘符"),
_T("标题"),
_T("文件系统"),
_T("总空间"),
_T("可用空间"),
_T("描述"),
};
LVCOLUMN lv = {};
lv.mask = LVCF_WIDTH | LVCF_TEXT;
lv.cx = 120;//宽度
//添加列表
lv.pszText = buf[0];//列名
lv.cchTextMax = 3;
ListView_InsertColumn(
hList,//句柄
0,
&lv
);
lv.pszText = buf[1];//列名
ListView_InsertColumn(
hList,//句柄
1,
&lv
);
lv.pszText = buf[2];//列名
ListView_InsertColumn(
hList,//句柄
2,
&lv
);
lv.pszText = buf[3];//列名
ListView_InsertColumn(
hList,//句柄
3,
&lv
);
lv.pszText = buf[4];//列名
ListView_InsertColumn(
hList,//句柄
4,
&lv
);
lv.pszText = buf[5];//列名
ListView_InsertColumn(
hList,//句柄
5,
&lv
);
ListView_SetExtendedListViewStyle(hList, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
TCHAR szName[0x300] = { 0 };
GetLogicalDriveStrings(0x300, szName);
TCHAR* pName = szName;
int i = 0;
while (_tcsclen(pName) != 0)
{
LVITEM li = {};
li.mask = LVIF_TEXT;
//第i行
li.pszText = (TCHAR*)TEXT("");
li.iItem = i;
//对每行进行数据写入之前得先插入这一行
ListView_InsertItem(hList, &li);
//打印盘符
//对行进行数据写入,i(从0开始)代表第几行,0代表第几列
ListView_SetItemText(hList, i, 0, pName);
TCHAR szTitle[20] = { 0 };
TCHAR szFileSystem[10] = { 0 };
//获取标题和文件系统
GetVolumeInformation(pName, szTitle, 20, NULL, NULL, NULL,szFileSystem, 10);
//打印标题
ListView_SetItemText(hList, i, 1, szTitle);
//打印文件系统
ListView_SetItemText(hList, i, 2, szFileSystem);
//获取磁盘的空间信息
DWORD 每簇的扇区数量 = 0;
DWORD 扇区容量 = 0;
DWORD 空闲簇 = 0;
DWORD 全部簇 = 0;
GetDiskFreeSpace(pName,&每簇的扇区数量, &扇区容量, &空闲簇, &全部簇);
double 总容量 = (全部簇 / 1024.0) * 每簇的扇区数量 * 扇区容量 / 1024 / 1024;
double 空闲容量 = (空闲簇 / 1024.0) * 每簇的扇区数量 * 扇区容量 / 1024 / 1024;
TCHAR szBuf[100] = { 0 };
_stprintf_s(szBuf, 100, _T("%lf"), 总容量);
ListView_SetItemText(hList, i, 3, szBuf);
_stprintf_s(szBuf, 100, _T("%lf"), 空闲容量);
ListView_SetItemText(hList, i, 4, szBuf);
ListView_SetItemText(hList, i, 5, pName);
//打印磁盘类型
DWORD dwType = GetDriveType(pName);
switch (dwType)
{
case DRIVE_UNKNOWN://未知类型
case DRIVE_NO_ROOT_DIR://路径错误
case DRIVE_REMOVABLE://可移动的磁盘
ListView_SetItemText(hList, i, 5, (LPWSTR)L"可移动介质类驱动器");
break;
case DRIVE_FIXED://硬盘
ListView_SetItemText(hList, i, 5, (LPWSTR)L"不可移除的驱动器");
break;
case DRIVE_REMOTE://远程硬盘
case DRIVE_CDROM://光驱
case DRIVE_RAMDISK://内存硬盘
default:
break;
}
pName += _tcsclen(pName) + 1;
i++;
}
}
break;
case WM_CLOSE:
EndDialog(hWnd, 0);
break;
default:
break;
}
return 0;
}
6.效果图
附:可自定义菜单栏,资源文件中添加Menu,并在Dialog中添加即可