spark108
@spark108

Как получить имя текущего юзера в C++?

Хочу получить имя юзера текущей сессии Windows, но ничего не выходит.
char buffer[256]; // буфер
	DWORD size; // размер
	size = sizeof(buffer); // размер буфера
	GetUserName(buffer, &size);
	string userName = buffer;


Ошибку выкидывает в 4 строке, типо char buffer не соответствует типу LPWSTR.
Хотя в книжке написано так.
  • Вопрос задан
  • 4855 просмотров
Решения вопроса 1
@none7
Windows ведь. В заголовках фунция определена так:
BOOL WINAPI GetUserNameW(LPWSTR  lpBuffer, LPDWORD lpnSize);
BOOL WINAPI GetUserNameA(LPSTR  lpBuffer, LPDWORD lpnSize);
#ifdef _UNICODE
#define GetUserName GetUserNameW
#else
#define GetUserName GetUserNameA
#endif

Решения на выбор:
  • Убрать в настройках компиляции определение _UNICODE
  • Использовать GetUserNameA
  • Переписать с использованием TCHAR, size при этом должен быть sizeof(buffer) / sizeof(*buffer)

И да asd111 прав буфер обязан быть размером UNLEN+1, иначе может случится переполнение буфера, хоть это и маловероятно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@asd111
#include <windows.h>
#include <Lmcons.h>

char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы