使用 cpp 获取环境变量

CPPNEWBIE

所以我一直试图弄清楚如何找到一个环境变量并用 C++ 将它打印在屏幕上,但在过去的 3 个小时左右,我一直被卡住了。当我打印出 currentDesktop 变量时,它只打印出“/Desktop”。但我要找的是它前面的用户名。我一直在阅读 Microsoft 论坛上关于 GetEnviromentVariable 函数的文档,这就是我到目前为止所想到的。帮助将不胜感激,因为我还没有那么有经验,Thx。

#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
#define BUFSIZE 4096
using namespace std;
int main()
{
    LPCWSTR Env = L"%USERPROFILE";
    LPTSTR pszOldVal;
    string IPADD;
     pszOldVal = (LPTSTR)malloc(BUFSIZE * sizeof(TCHAR));
    if (NULL == pszOldVal)
    {
        printf("Out of memory\n");
        return FALSE;
    }
    string currentDesktop = GetEnvironmentVariable(Env,pszOldVal,BUFSIZE) + "\\Desktop";
    cout << currentDesktop;
    return 0;

}
雷米勒博

您正在滥用该GetEnvironmentVariable()功能。一方面,您缺少%变量 name的尾随L"%USERPROFILE"另一方面,返回值是复制到提供的缓冲区中的字符数。您正在将该整数添加到字符串文字中"\\Desktop",这不是您想要的。

试试这个:

#include <iostream>
#include <string>
#include <windows.h>

std::wstring GetEnv(const std::wstring &varName)
{
    std::wstring str;
    DWORD len = GetEnvironmentVariableW(varName.c_str(), NULL, 0);
    if (len > 0)
    {
        str.resize(len);
        str.resize(GetEnvironmentVariableW(varName.c_str(), &str[0], len));
    }
    return str;
}

std::wstring GetUserDesktopPath()
{
    std::wstring path = GetEnv(L"%USERPROFILE%");
    if (!path.empty()) path += L"\\Desktop";
    return path;
}

int main()
{
    std::wstring currentDesktop = GetUserDesktopPath();
    std::wcout << currentDesktop;
    return 0;
}

话虽如此,如果您只想要用户名,请使用%USERNAME%而不是%USERPROFILE%. 或者更好,使用GetUserName()代替GetEnvironmentVariable()

#include <iostream>
#include <string>
#include <windows.h>

std::wstring GetUserName()
{
    std::wstring str;
    DWORD len = 0;
    if (!GetUserNameW(NULL, &len))
    {
        if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
        {
            str.resize(len);
            if (GetUserNameW(&str[0], &len))
                str.resize(len-1);
            else
                str = L"";
        }
    }
    return str;
}

int main()
{
    std::wstring currentUser = GetUserName();
    std::wcout << currentUser;
    return 0;
}

但是,获取用户桌面路径正确方法是仅向 Windows 询问该特定路径,不要假设它位于用户配置文件的根目录中,或者是 named Desktop使用SHGetFolderPath()SHGetKnownFolderPath()用于该查询,例如:

#include <iostream>
#include <string>
#include <windows.h>
#include <shlobj.h>

std::wstring GetFolderPath(CSIDL folderID)
{
    WCHAR path[MAX_PATH] = {};
    SHGetFolderPathW(NULL, folderID, NULL, SHGFP_TYPE_CURRENT, path);
    return path;
}
/* or:
std::wstring GetFolderPath(REFKNOWNFOLDERID folderID)
{
    std::wstring str;
    PWSTR path = NULL;
    if (SHGetKnownFolderPath(folderID, 0, NULL, &path) == S_OK)
        str = path;
    CoTaskMemFree(path);
    return str;
}
*/

std::wstring GetUserDesktopPath()
{
    return GetFolderPath(CSIDL_DESKTOPDIRECTORY);
    // or: return GetFolderPath(FOLDERID_Desktop);
}

int main()
{
    std::wstring currentDesktop = GetUserDesktopPath();
    std::wcout << currentDesktop;
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Docker环境变量获取凭证

来自分类Dev

使用脚本jquery获取环境变量

来自分类Dev

使用Inno设置获取环境变量

来自分类Dev

使用环境变量

来自分类Dev

使用Golang获取Windows认可的环境变量

来自分类Java

使用弹簧4从系统环境变量中获取数据

来自分类Dev

无法使用OS Python获取环境变量

来自分类Dev

使用PHP脚本获取Heroku环境变量

来自分类Dev

使用Fish从Bitbake制作的SDK中获取环境变量

来自分类Dev

使用Python获取用户的环境变量

来自分类Dev

PowerShell - 如何使用通配符获取环境变量值

来自分类Java

使用Maven的环境变量

来自分类Dev

使用环境变量的NestJS

来自分类Dev

使用“ SHELL”环境变量

来自分类Dev

Python 使用环境变量

来自分类Dev

使用PowerShell变量作为环境变量

来自分类Dev

更正gunicorn.conf以获取供Django使用的环境变量

来自分类Dev

使用Angular是否可以在运行时从系统环境变量获取数据?

来自分类Dev

使用环境变量获取mysql数据库密码和主机抛出错误

来自分类Dev

我无法在Windows 10中使用CMake获取环境变量

来自分类Linux

使用sed从带有/ x00的/ proc / * / environ怪异值中获取环境变量

来自分类Dev

如何使用C在Windows中分别获取用户和系统环境变量

来自分类Dev

InnoSetup,展开环境变量(使用{reg:...}从注册表值中获取)

来自分类Dev

如何在Docker构建过程中使用环境变量来获取脚本?

来自分类Dev

如何在docker文件中获取对我可用的docker环境变量?(使用React / JS / webpack)

来自分类Dev

无法在 Windows 中使用打字稿获取 npm 脚本中定义的环境变量

来自分类Dev

对列表使用for循环并将元素设置为环境变量,然后获取值

来自分类Dev

如何使用 VBA If 语句的环境变量在 Excel 中获取单元格值

来自分类Dev

在clion中使用远程模式时,如何从远程主机上的脚本中获取环境变量?

Related 相关文章

  1. 1

    使用Docker环境变量获取凭证

  2. 2

    使用脚本jquery获取环境变量

  3. 3

    使用Inno设置获取环境变量

  4. 4

    使用环境变量

  5. 5

    使用Golang获取Windows认可的环境变量

  6. 6

    使用弹簧4从系统环境变量中获取数据

  7. 7

    无法使用OS Python获取环境变量

  8. 8

    使用PHP脚本获取Heroku环境变量

  9. 9

    使用Fish从Bitbake制作的SDK中获取环境变量

  10. 10

    使用Python获取用户的环境变量

  11. 11

    PowerShell - 如何使用通配符获取环境变量值

  12. 12

    使用Maven的环境变量

  13. 13

    使用环境变量的NestJS

  14. 14

    使用“ SHELL”环境变量

  15. 15

    Python 使用环境变量

  16. 16

    使用PowerShell变量作为环境变量

  17. 17

    更正gunicorn.conf以获取供Django使用的环境变量

  18. 18

    使用Angular是否可以在运行时从系统环境变量获取数据?

  19. 19

    使用环境变量获取mysql数据库密码和主机抛出错误

  20. 20

    我无法在Windows 10中使用CMake获取环境变量

  21. 21

    使用sed从带有/ x00的/ proc / * / environ怪异值中获取环境变量

  22. 22

    如何使用C在Windows中分别获取用户和系统环境变量

  23. 23

    InnoSetup,展开环境变量(使用{reg:...}从注册表值中获取)

  24. 24

    如何在Docker构建过程中使用环境变量来获取脚本?

  25. 25

    如何在docker文件中获取对我可用的docker环境变量?(使用React / JS / webpack)

  26. 26

    无法在 Windows 中使用打字稿获取 npm 脚本中定义的环境变量

  27. 27

    对列表使用for循环并将元素设置为环境变量,然后获取值

  28. 28

    如何使用 VBA If 语句的环境变量在 Excel 中获取单元格值

  29. 29

    在clion中使用远程模式时,如何从远程主机上的脚本中获取环境变量?

热门标签

归档