【问题标题】:Get current username in C++ on Windows在 Windows 上使用 C++ 获取当前用户名
【发布时间】:2012-07-20 04:58:00
【问题描述】:

我正在尝试创建一个程序,使用 C++ 在 Windows 上检索当前用户的用户名。

我试过了:

char *userName = getenv("LOGNAME");
stringstream ss;
string userNameString;
ss << userName;
ss >> userNameString;
cout << "Username: " << userNameString << endl;

除了“用户名:”之外什么都不输出。

获取当前用户名的最简单、最好的方法是什么?

【问题讨论】:

  • 另外,这可能会对您有所帮助:cplusplus.com/forum/beginner/12076
  • 您不应使用环境变量来检索用户名。不保证存在。通常,在 BAT 文件之外,您不应使用环境变量。
  • 如果必须使用环境变量来检索用户名,正确的是USERNAME而不是LOGNAME。您可能还想要USERDOMAIN

标签: c++ windows dev-c++


【解决方案1】:

通过使用getenv()函数:

char * user = getenv("username");
cout << string(user) << endl;

如果你想转换成字符串,那么使用:

string userStr = string(user);

【讨论】:

    【解决方案2】:

    如果在使用char[] 作为存储时GetUserName(username, &amp;username_len); 不起作用,您应该知道GetUserName 可以是解析为GetUserNameW 的宏。如果您使用 Windows API,您可能知道WA 之间的区别。如果您使用 char[] 作为 buf,使用 GetUserNameA 可以解决问题

    【讨论】:

      【解决方案3】:

      有效:

      #include <iostream>
      using namespace std; 
      
      #include <windows.h>
      #include <Lmcons.h>
      
      int main()
      {
      TCHAR name [ UNLEN + 1 ];
      DWORD size = UNLEN + 1;
      
      if (GetUserName( (TCHAR*)name, &size ))
      wcout << L"Hello, " << name << L"!\n";
      else
      cout << "Hello, unnamed person!\n";
      }
      

      【讨论】:

        【解决方案4】:

        使用 Win32API GetUserName 函数。示例:

        #include <windows.h>
        #include <Lmcons.h>
        
        char username[UNLEN+1];
        DWORD username_len = UNLEN+1;
        GetUserName(username, &username_len);
        

        【讨论】:

        【解决方案5】:

        对我有用的更正代码:

        TCHAR username[UNLEN + 1];
        DWORD size = UNLEN + 1;
        GetUserName((TCHAR*)username, &size);
        

        我正在使用 Visual Studio Express 2012(在 Windows 7 上),也许它与 Dev-Cpp 的工作方式相同

        【讨论】:

          【解决方案6】:

          您应该使用环境变量 USERNAME。

          【讨论】:

          • %username% 环境变量不安全。如果您使用它,用户可以打开一个 cmd 行并执行set username=SomeOneElse launchYourApp,他将有效地以 SomeOneElse 身份运行您的应用程序。这可能是一个安全漏洞。
          【解决方案7】:

          在 Windows 上使用 USERNAME 环境变量或GetUserName 函数

          【讨论】:

            猜你喜欢
            • 2010-11-13
            • 1970-01-01
            • 2011-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多