C++ 获取用户桌面路径

举报
福州司马懿 发表于 2024/10/30 10:15:49 2024/10/30
【摘要】 在MFC(Microsoft Foundation Class)应用程序中,如果你想要获取用户桌面的路径,可以使用Windows API函数SHGetFolderPath或SHGetKnownFolderPath(对于较新的Windows版本)。这些函数允许你检索特殊文件夹的路径,如桌面、文档、图片等。以下是一个使用SHGetFolderPath来获取用户桌面路径的示例代码:#include...

在MFC(Microsoft Foundation Class)应用程序中,如果你想要获取用户桌面的路径,可以使用Windows API函数SHGetFolderPathSHGetKnownFolderPath(对于较新的Windows版本)。这些函数允许你检索特殊文件夹的路径,如桌面、文档、图片等。

以下是一个使用SHGetFolderPath来获取用户桌面路径的示例代码:

#include <windows.h>
#include <shlobj.h> // 包含SHGetFolderPath等Shell函数的声明
#include <tchar.h>
#include <afxdlgs.h> // 包含CFileDialog等MFC类的声明(可选,用于显示对话框等)

void GetDesktopPath(TCHAR* path, size_t pathSize)
{
    // 初始化COM库(如果需要的话,对于SHGetFolderPath通常不需要,但对于SHGetKnownFolderPath是必需的)
    // CoInitialize(NULL); // 如果使用SHGetKnownFolderPath,则取消注释此行

    // 获取桌面文件夹的路径
    HRESULT hr = SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, SHGFP_TYPE_CURRENT, path);

    // 检查是否成功获取路径
    if (SUCCEEDED(hr))
    {
        // 路径已成功获取,确保以反斜杠结尾(虽然SHGetFolderPath通常已经这样做)
        size_t len = _tcslen(path);
        if (len > 0 && path[len - 1] != _T('\\'))
        {
            if (len < pathSize - 1)
            {
                _tcscat(path, _T("\\"));
            }
            else
            {
                // 缓冲区太小,无法添加反斜杠
                // 处理错误或截断路径(在这里我们简单地截断)
                path[pathSize - 1] = _T('\0');
            }
        }
    }
    else
    {
        // 未能获取路径,设置path为空字符串或适当的错误消息
        _tcscpy_s(path, pathSize, _T(""));
        // 处理错误,例如显示错误消息框
        // AfxMessageBox(_T("Failed to get desktop path."));
    }

    // 如果初始化了COM库,则在这里释放它
    // CoUninitialize(); // 如果使用SHGetKnownFolderPath,则取消注释此行
}

// 在某个MFC函数或事件处理程序中调用GetDesktopPath
void SomeMFCFunction()
{
    TCHAR desktopPath[_MAX_PATH];
    GetDesktopPath(desktopPath, _MAX_PATH);
    // 现在你可以使用desktopPath,例如显示在消息框中
    AfxMessageBox(desktopPath);
}

注意

  • CSIDL_DESKTOP是一个常量,表示桌面文件夹。
  • SHGFP_TYPE_CURRENT指定获取当前用户的桌面路径。
  • SHGetFolderPath函数在较新的Windows版本中已被SHGetKnownFolderPath取代,但SHGetFolderPath仍然在许多情况下有效。如果你希望代码与更广泛的Windows版本兼容,可以考虑使用SHGetKnownFolderPath,但请注意,这需要初始化COM库。
  • 在上面的代码中,我注释掉了CoInitializeCoUninitialize的调用,因为SHGetFolderPath不需要它们。但是,如果你使用SHGetKnownFolderPath,则需要取消注释这些行来初始化COM库。
  • 路径缓冲区desktopPath的大小由_MAX_PATH定义,这是一个预定义的常量,表示路径的最大长度。

在实际应用中,你可能希望在获取路径后执行某些操作,比如将文件保存到桌面或显示桌面上的文件列表。上面的示例代码仅演示了如何获取路径并将其显示在一个消息框中。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。