get the
current Username
Author:
Thomas Stutz
{1.}
function
GetCurrentUserName: string;
const
cnMaxUserNameLen = 254;
var
sUserName: string;
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(sUserName, cnMaxUserNameLen);
GetUserName(PChar(sUserName),
dwUserNameLen);
SetLength(sUserName, dwUserNameLen);
Result := sUserName;
end;
procedure
TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetCurrentUserName);
end;
{2.}
function
GetCurrentUserName(var CurrentUserName: string): Boolean;
var
BufferSize: DWORD;
pUser: PChar;
begin
BufferSize := 0;
GetUserName(nil, BufferSize);
pUser := StrAlloc(BufferSize);
try
Result := GetUserName(pUser, BufferSize);
CurrentUserName := StrPas(pUser);
finally
StrDispose(pUser);
end;
end;
procedure
TForm1.Button1Click(Sender: TObject);
var
CurrentUserName: string;
begin
GetCurrentUserName(CurrentUserName);
Label1.Caption := CurrentUserName;
end;
{*********************************************}
{
Windows NT/2000/XP:
The GetUserNameEx function retrieves the
name of the user or other
security principal associated with the
calling thread.
You can specify the format of the returned
name.
If the thread is impersonating a client,
GetUserNameEx
returns the name of the client.
}
const
NameUnknown = 0; // Unknown name type.
NameFullyQualifiedDN = 1; // Fully qualified distinguished name
NameSamCompatible = 2; // Windows NT® 4.0
account name
NameDisplay = 3; // A "friendly" display name
NameUniqueId = 6; // GUID string that the
IIDFromString function returns
NameCanonical = 7; // Complete canonical name
NameUserPrincipal = 8; // User principal
name
NameCanonicalEx = 9;
NameServicePrincipal = 10; // Generalized service principal name
DNSDomainName = 11; // DNS domain name, plus the user name
procedure
GetUserNameEx(NameFormat: DWORD;
lpNameBuffer: LPSTR; nSize: PULONG);
stdcall;
external 'secur32.dll' Name
'GetUserNameExA';
function
LoggedOnUserNameEx(fFormat: DWORD): string;
var
UserName: array[0..250] of char;
Size: DWORD;
begin
Size := 250;
GetUserNameEx(fFormat, @UserName, @Size);
Result := UserName;
end;
procedure
TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text :=
LoggedOnUserNameEx(NameSamCompatible);
end;