21

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

我试过这个:

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

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

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

4

7 回答 7

55

使用 Win32APIGetUserName函数。例子:

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

char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
于 2012-07-20T21:57:45.590 回答
9

更正了对我有用的代码:

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

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

于 2013-07-31T14:02:32.643 回答
5

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

于 2012-07-20T21:58:01.797 回答
5

有用:

#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";
}
于 2014-05-23T12:22:20.490 回答
3

万一GetUserName(username, &username_len);在使用 as 存储时不起作用char[],您应该知道GetUserName可以将宏解析为GetUserNameW. 如果您使用 Windows API,您可能知道 和 之间的W区别AGetUserNameA如果您使用char[]as buf ,使用将解决问题

于 2020-06-09T08:58:13.350 回答
1

通过使用getenv()功能:

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

如果要转换为字符串,请使用:

string userStr = string(user);
于 2021-08-13T19:01:14.003 回答
-2

您应该使用环境变量 USERNAME。

于 2012-07-20T22:08:17.637 回答