Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

current user name [D7, D2005, XP, 2003]


Страницы:   1 2

IPE ©   (2007-05-13 12:56:00) 

Как получить имя пользователя или адрес рабочего стола. На разных ПК этот адрес разный, поэтому необходимо определить имя юзера, кр. сидит за компом. Как это можно сделать?


DVM   (2007-05-13 23:32:00) [1]

В справке BDS2006 и D2007 все нормально.


begin...end   (2007-05-13 23:27:00) [2]

> {RASkov} ©   (13.05.07 23:22) [31]

> В моей справке так: ...

В моей -- тоже. Но Delphi-справка по API-функциям сильно урезана. В [28] приведена цитата из MSDN: http://msdn2.microsoft.com/en-us/library/ms724432.aspx


{RASkov}   (2007-05-13 23:22:00) [3]

> [28] begin...end ©   (13.05.07 23:13)

В моей справке так:
The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system.

BOOL GetUserName(

   LPTSTR lpBuffer, // address of name buffer
   LPDWORD nSize  // address of size of name buffer
  );
Parameters
....
Header File: winbase.h


и про Lmcons.h там ни слова... :( Еще раз благодарю.


begin...end   (2007-05-13 23:18:00) [4]

> DVM ©   (13.05.07 23:12) [27]

>  Сколько хочешь столько и выделяй - не хватит - будет ошибка.
А зачем нужна ошибка?

>  В примере с MSDN вот вообще 32767 выделяют.
А зачем выделять 32767, если достаточно 257?


{RASkov}   (2007-05-13 23:17:00) [5]

> [27] DVM ©   (13.05.07 23:12)

Видимо макс. имя может быть 256 символов. + #0
А выделять можно сколько угодно, после GetUserName(PUser, N);
в N будет кол-во скопированных символов в PUser.

> [28] begin...end ©   (13.05.07 23:13)

Спасибо ;)


begin...end   (2007-05-13 23:13:00) [6]

> {RASkov} ©   (13.05.07 23:09) [25]

lpBuffer
[out]A pointer to the buffer to receive the user's logon name. If this buffer is not large enough to contain the entire user name, the function fails. A buffer size of (UNLEN + 1) characters will hold the maximum length user name including the terminating null character. UNLEN is defined in Lmcons.h.

Lmcons.h:

#define UNLEN       256                 // Maximum user name length


DVM   (2007-05-13 23:12:00) [7]


> А надо 257.

Почему именно 257? Сколько хочешь столько и выделяй - не хватит - будет ошибка.

В примере с MSDN вот вообще 32767 выделяют.


{RASkov}   (2007-05-13 23:10:00) [8]

Фу... блин .... не то спросил, понятно все :)


{RASkov}   (2007-05-13 23:09:00) [9]

> [22] begin...end ©   (13.05.07 23:05)

+1 для #0 а еще 1 для чего?
Спасибо.


begin...end   (2007-05-13 23:08:00) [10]

> {RASkov} ©   (13.05.07 23:07) [23]

Да.


{RASkov}   (2007-05-13 23:07:00) [11]

> [22] begin...end ©   (13.05.07 23:05)

Т.е. надо было
N:=257;
GetMem(PUser, N);
?


begin...end   (2007-05-13 23:05:00) [12]


> Он же выделил всего 255 памяти.

А надо 257.


DVM   (2007-05-13 23:04:00) [13]


> Тогда 257.

257 то почему? Он же выделил всего 255 памяти.


begin...end   (2007-05-13 23:00:00) [14]

А, так там не string, а PChar... Тогда 257.


IPE   (2007-05-13 22:56:00) [15]

млин, как сам не догадался?


begin...end   (2007-05-13 22:50:00) [16]


> N:=255;

256


{RASkov}   (2007-05-13 22:49:00) [17]

Ну вот опять не обновил перед отправкой :(


{RASkov}   (2007-05-13 22:48:00) [18]

> [13] IPE   (13.05.07 22:35)
> thank, только имя не выводится User NAme:  ничего.

  > в [12] небольшая ошибка

Ну да N всегда 4 :) Изменить на
//N:=SizeOf(PUser);
N:=255;
> IPE
Можно было и догадаться ;)


DVM   (2007-05-13 22:44:00) [19]


> N:=SizeOf(PUser);

N всегда будет равно 4


DVM   (2007-05-13 22:42:00) [20]


> thank, только имя не выводится User NAme:  ничего.

в [12] небольшая ошибка

function GetUserFromWindows: string;
var
 UserName : string;
 UserNameLen : Dword;
begin
 UserNameLen := 255;
 SetLength(userName, UserNameLen);
 if GetUserName(PChar(UserName), UserNameLen) then
   Result := Copy(UserName,1,UserNameLen - 1)
 else
   Result := 'Unknown';
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо