在Windows上获取C ++中的当前用户名

时间:2012-07-20 21:54:37

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

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

我试过了:

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

除“用户名:”外没有输出任何内容。

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

6 个答案:

答案 0 :(得分:41)

使用Win32API GetUserName功能。例如:

#include <windows.h>
#include <Lmcons.h>

char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);

答案 1 :(得分:5)

更正了适用于我的代码:

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

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

答案 2 :(得分:4)

在Windows上使用 USERNAME 环境变量或GetUserName功能

答案 3 :(得分:2)

有效:

#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 :(得分:1)

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

,则使用char[]将解决此问题。

答案 5 :(得分:-1)

您应该使用env变量USERNAME。