Получает имя пользователя для текущего процесса. Обычно это имя пользователя зарегистрировавшегося в системе. Имя сеанса:
Вот она.
BOOL GetUserName ( LPTSTR lpBuffer, // указатель на буфер LPDWORD nSize // получает размер возвращает количество символов );
Размер буфера должен быть достаточный для того, чтобы вместить пользователя. Определение размера носит имя UNLEN и описана в Lmcons.h. При неудачном выполнении функция вернет 0:
#define UNLEN 256 // Maximum user name length
Давайте совместим "Шаг 38 - GetComputerName()" и этот шаг, создав универсальный класс, который нам поможет легко получать эти имена. Я применю технологию описанную в шаге "Шаг 108 - Универсальные классы". Ведь имя можно получить по разному, например, получить из реестра. Весь код и структуру классов можно посмотреть в проекте, а вот сам конкретный код получения функции имени пользователя.
CString CEasyGetUserName::Get() { char buffer[UNLEN+1]; // буфер DWORD size; // размер size=sizeof(buffer); // размер буфера if (GetUserName(buffer,&size)==0) throw "Error GetUserName"; // при ошибке функция вернет 0 return buffer; // вернуть результат }
Структура классов довольно сложная для такой простой задачи. Стоит создавать такое количество классов или нет, это вопрос. Мне просто нравиться так программировать. Можно в любой момент все изменить и это хорошо. Ну, например при переходе например на Windows 9000 beta 2 bild 199 :-) какой нибуть все что нужно только исправить одну функцию а все остальное будет работать.