2012-07-20 27 views
13

Geçerli kullanıcının kullanıcı adını C++ kullanarak Windows'ta geri yükleyen bir program oluşturmaya çalışıyorum. Güncel kullanıcı adını C++ 'da Windows'ta alın

bu çalıştı:

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

Hiçbir şey hariç çıkarılmaktadır "Kullanıcı Adı:".

Geçerli kullanıcı adını almanın en kolay, en iyi yolu nedir?

+2

Kullanıcı adını almak için ortam değişkenlerini kullanmamalısınız. Var olduğu garanti edilmez. Genel olarak, bir BAT dosyasının dışında ortam değişkenlerini kullanmamalısınız. – user7116

+0

Kullanıcı adını almak için bir ortam değişkeni kullanmanız gerekiyorsa, doğru kullanıcı 'USERNAME '' LOGNAME' değil. Ayrıca USERDOMAIN’i de isteyebilirsiniz. – Ferruccio

+1

Ayrıca, bu size yardımcı olabilir: http://www.cplusplus.com/forum/beginner/12076/ – Chefire

cevap

33

Win32API GetUserName işlevini kullanın. Örnek: Pencerelerde

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

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

+1, [kullanıcı adının biçimini kontrol etmek isterseniz GetUserNameEx] kullanabilirsiniz (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724268(v=vs.85).aspx) kullanıcı tarafından girilenin yerine. Lmcons.h' – user7116

+0

'dan @sixlettervariables 'UNLEN + 1' kullanmalısınız: teşekkürler, ben düzenledim. '' 'içerip içermediğini bilerek herhangi bir ihtimaliniz var mı? – orlp

+0

Mac'im var, ancak bellek hizmet veriyorsa cevap hayır. [LANMAN başlıklarının ayrı ayrı getirilmesi gerekiyor ve bence bu örnek kabul ediliyor] (http://msdn.microsoft.com/en-us/ kütüphane/pencere/masa/ms676907% 28v = VS.85% 29.aspx). – user7116

5

kullanmak KULLANICI ADI çevre değişken veya GetUserName fonksiyon

+3

İkincisi tercih edilir. – chris

1

Sen env değişken KULLANICI_ADI kullanmalıdır. benim için çalıştı

+1

% kullanıcı adı% env değişkeni güvenli değil. Kullanıyorsanız, kullanıcı bir cmd çizgisi açabilir ve 'set username = SomeOneElse başlatınYourApp' ve etkin bir şekilde uygulamanızı SomeOneElse olarak çalıştıracak. Bu bir güvenlik açığı olabilir. – CodeKid

5

Düzeltilmiş kod: Visual Studio Express 2012 kullanıyorum

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

(Windows 7), belki de Dev-CPP

2

Çalışıyor ile aynı şekilde çalışır:

#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"; 
} 
İlgili konular