Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить имя текущего пользователя 2

Delphi , ОС и Железо , Компьютер

Получить имя текущего пользователя 2

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch


 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;

Программа на Delphi, которая извлекает текущее имя пользователя и отображает его в лейбле на форме.

Описание работы кода:

  1. Функция GetCurrentUserName принимает строковый параметр CurrentUserName и возвращает булевое значение, указывающее, была ли функция успешной.
  2. Функция сначала вызывает GetUserName с нулевым указателем и переменной DWORD BufferSize. Это initializes размер буфера в 0.
  3. Затем она выделяет память для имени пользователя с помощью StrAlloc и присваивает ее переменной pUser.
  4. Блок try пытается получить имя пользователя с помощью GetUserName с выделенной памятью и обновляет параметр CurrentUserName полученным именем.
  5. Если возникает исключение, блок finally освобождает выделившуюся память с помощью StrDispose.

Вторая часть кода - это обработчик события формы для клика кнопки. Когда кнопка нажата, она вызывает функцию GetCurrentUserName и присваивает полученное имя пользователю лейблу на форме.

Альтернативное решение использует функцию GetUserNameEx из Windows API для извлечения текущего имени пользователя в конкретном формате (в этом случае, в формате имени аккаунта Windows NT 4.0).

Описание работы кода:

  1. Функция LoggedOnUserNameEx принимает параметр DWORD fFormat и возвращает строку.
  2. Она initializes массив символов UserName размером 250 символов и переменную DWORD Size.
  3. Затем она вызывает GetUserNameEx с указанным форматом, адресом массива UserName и адресом переменной Size.
  4. Функция возвращает полученное имя пользователя как строку.

Обработчик события формы для клика кнопки в этом коде присваивает полученное имя пользователю редактируемому контроллу на форме.

Замечание, что вторая часть кода использует другой подход для извлечения текущего имени пользователя и требует более конкретного параметра формата, в то время как первая часть кода более общая и может возвращать имя пользователя в различных форматах.

Получение имени текущего пользователя в Delphi на основе функции GetUserName и GetUserNameEx для различных форматов именования безопасности.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компьютер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:27:06/0.0049631595611572/1