| 
   
    | ...get the current Username? |   
    | Autor: 
      Thomas Stutz |  | [ Print tip 
] |  |  |  
 
 
{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;
 
 
 
 
   |