Как узнать имя пользователя

Материал из DRKB

Как узнать имя пользователя[править | править код]

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 := '';
end;


ID: 01730


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;


Source: http://delphiworld.narod.ru/
ID: 01731



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;


Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01732