2012-07-20 21 views
13

Estoy intentando crear un programa que recupere el nombre de usuario del usuario actual en Windows usando C++.Obtenga el nombre de usuario actual en C++ en Windows

yo probamos este:

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

Nada se da salida a excepción de "nombre de usuario".

¿Cuál es la forma más simple y mejor para obtener el nombre de usuario actual?

+2

No debe usar variables de entorno para recuperar el nombre de usuario. No está garantizado que exista. En general, fuera de un archivo BAT no debe usar variables de entorno. – user7116

+0

Si debe usar una variable de entorno para recuperar el nombre de usuario, la correcta es 'NOMBRE DE USUARIO' no' NOMBRE DE REGISTRO'. También puede querer 'USERDOMAIN'. – Ferruccio

+1

Además, esto podría ayudarlo: http://www.cplusplus.com/forum/beginner/12076/ – Chefire

Respuesta

33

Utilice la función Win32API GetUserName. Ejemplo:

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

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

+1, puede usar [GetUserNameEx si desea controlar el formato del nombre de usuario] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724268(v=vs.85).aspx) en lugar de lo que ingresó el usuario. Debes usar 'UNLEN + 1' de' Lmcons.h' – user7116

+0

@sixlettervariables: gracias, he editado. ¿Sabe por casualidad si '' incluye ''? – orlp

+0

Estoy en mi Mac, pero si la memoria sirve, la respuesta es No. [Los encabezados LANMAN deben aparecer por separado, y creo que este ejemplo está de acuerdo] (http://msdn.microsoft.com/en-us/ library/windows/desktop/ms676907% 28v = vs.85% 29.aspx). – user7116

5

En Windows utilizan NOMBRE DE USUARIO variable de entorno o GetUserName función

+3

Lo último es preferible. – chris

1

Se debe utilizar la variable de entorno NOMBRE DE USUARIO.

+1

La variable% username% env no es segura. Si usa eso, el usuario puede abrir una línea de cmd y hacer 'set username = SomeOneElse launchYourApp' y estará ejecutando efectivamente su aplicación como SomeOneElse. Esto puede ser una vulnerabilidad de seguridad. – CodeKid

5

código corregido que trabajó para mí:

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

Estoy usando Visual Studio Express 2012 (en Windows 7), tal vez funciona de la misma manera con Dev-Cpp

2

Funciona:

#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"; 
} 
Cuestiones relacionadas