![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
current user name [D7, D2005, XP, 2003]
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;