用GetVolumeInformation 获取卷标 的疑惑

大脸猫脸大 2009-01-19 07:11:07
//对话框程序
void CMyColorDlg::OnButton1()
{
char szLabel[64];
char szFSName[64];
DWORD dwSerialNumber;
DWORD dwMaxLength;
DWORD dwFlags;

memset(szLabel,0,64);

if ( !GetVolumeInformation("C:",szLabel,64,&dwSerialNumber,&dwMaxLength,
&dwFlags,szFSName,64) )
Beep(1000,100); //调用失败则响铃提醒
SetDlgItemText(IDC_STATUS,szLabel); //将卷标显示在文本标签
}


//Win32API程序
.........
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
........

char szLabel[64];
char szFSName[64];
char szTemp[32];
DWORD dwSerialNumber;
DWORD dwMaxLength;
DWORD dwFlags;

memset(szLabel,0,64);
memset(szFSName,0,64);
memset(szTemp,0,32);
switch (message)
{
case WM_COMMAND:
break;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
GetVolumeInformation("C:\\",szLabel,64,&dwSerialNumber,
&dwMaxLength,&dwFlags,szFSName,64);

TextOut(hdc,0,10,"卷标名称",strlen("卷标名称"));
TextOut(hdc,130,10,szLabel,strlen(szLabel));

EndPaint(hWnd,&ps);

break;
........
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
-------------------------------------------------------------------------
我的windowsXP 装在C盘 卷标是 本地磁盘,(装好系统未修改过C盘卷标)
问题1:
调用上面对话框程序("C:\\") , ,
若 装好系统未修改过C盘卷标,文本标签没动静,换成其他盘符,显示正常,
然后我手动对C盘重命名一个卷标,调用上面对话框程序,显示正常了。这很奇怪!


问题2:

Win32API程序 中 将第一个参数改为"D:" [not "D:\\"] ,显示正常
但在 对话框 就会 失败,不知为什么?
...全文
801 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-01-19
  • 打赏
  • 举报
回复
SHFILEINFO sfi;
::SHGetFileInfo("C:\\", 0, &sfi, sizeof(sfi), SHGFI_DISPLAYNAME);
::MessageBox(NULL, sfi.szDisplayName, NULL, 0);
大脸猫脸大 2009-01-19
  • 打赏
  • 举报
回复
每次发帖总能看到cnzdgs 的身影,非常感谢 !


有没有更好的 函数 获取 卷标 ,得出我们在“我的电脑”看到的卷标 而 不管它是不是为空?
cnzdgs 2009-01-19
  • 打赏
  • 举报
回复
1、对于没有卷标的硬盘分区,系统会将其显示为“本地磁盘”,但实际卷标为空。
2、盘符后面是要加\的,可能某些时候不加\也能成功,但不要这样用。
jingzhongrong 2009-01-19
  • 打赏
  • 举报
回复
lpRootPathName
A pointer to a string that contains the root directory of the volume to be described.

If this parameter is NULL, the root of the current directory is used. A trailing backslash is required. For example, you specify \\MyServer\MyShare as \\MyServer\MyShare\, or the C drive as "C:\".

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧