C++ 获取用户桌面路径
        【摘要】 在MFC(Microsoft Foundation Class)应用程序中,如果你想要获取用户桌面的路径,可以使用Windows API函数SHGetFolderPath或SHGetKnownFolderPath(对于较新的Windows版本)。这些函数允许你检索特殊文件夹的路径,如桌面、文档、图片等。以下是一个使用SHGetFolderPath来获取用户桌面路径的示例代码:#include...
    
    
    
    在MFC(Microsoft Foundation Class)应用程序中,如果你想要获取用户桌面的路径,可以使用Windows API函数SHGetFolderPath或SHGetKnownFolderPath(对于较新的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库。
- 在上面的代码中,我注释掉了CoInitialize和CoUninitialize的调用,因为SHGetFolderPath不需要它们。但是,如果你使用SHGetKnownFolderPath,则需要取消注释这些行来初始化COM库。
- 路径缓冲区desktopPath的大小由_MAX_PATH定义,这是一个预定义的常量,表示路径的最大长度。
在实际应用中,你可能希望在获取路径后执行某些操作,比如将文件保存到桌面或显示桌面上的文件列表。上面的示例代码仅演示了如何获取路径并将其显示在一个消息框中。
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)