| 
| 
 | Вопрос # 411/ вопрос открыт / | 
 |  Как получить login пользователя под которым он входит в операционную систему,в сеть?GetUserName(lpBuffer,nSize); - практический пример, если можно
 
|  |   Вопрос задала: Наташа (статус: Посетитель)Вопрос отправлен: 16 марта 2007, 09:46
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Роман Здравствуйте, Наташа!Значит так,имя текущего пользователя оси можно узнать к примеру так(1),или так(2).Получить список зарегистрированных под NT пользователей можно так(3). Приложение:Переключить в обычный режим 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;2.========================================const   NameUnknown = 0; // Unknown name type.   NameFullyQualifiedDN = 1;  // Fully qualified distinguished 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;3.======================================type   USER_INFO_1 = record     usri1_name: LPWSTR;     usri1_password: LPWSTR;     usri1_password_age: DWORD;     usri1_priv: DWORD;     usri1_home_dir: LPWSTR;     usri1_comment: LPWSTR;     usri1_flags: DWORD;     usri1_script_path: LPWSTR;   end;   lpUSER_INFO_1 = ^USER_INFO_1;  function NetUserEnum(ServerName: PWideChar;   Level,   Filter: DWORD;   var Buffer: Pointer;   PrefMaxLen: DWORD;   var EntriesRead,   TotalEntries,   ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll';  function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external 'netapi32.dll';  {...}  procedure TForm1.Button1Click(Sender: TObject); var   EntiesRead: DWORD;   TotalEntries: DWORD;   UserInfo: lpUSER_INFO_1;   lpBuffer: Pointer;   ResumeHandle: DWORD;   Counter: Integer;   NetApiStatus: LongWord; begin   ResumeHandle := 0;   repeat     // NetApiStatus :=     // NetUserEnum(PChar('\NT-Domain'), 1, 0, lpBuffer, 0,EntiesRead, TotalEntries, ResumeHandle);     NetApiStatus := NetUserEnum(nil, 1, 0, lpBuffer, 0, EntiesRead,       TotalEntries, ResumeHandle);     UserInfo     := lpBuffer;      for Counter := 0 to EntiesRead - 1 do     begin       listbox1.Items.Add(WideCharToString(UserInfo^.usri1_name) + ' --> ' +         WideCharToString(UserInfo^.usri1_comment));       Inc(UserInfo);     end;      NetApiBufferFree(lpBuffer);   until (NetApiStatus <> ERROR_MORE_DATA); end;
|  | Ответ отправил: Роман (статус: 5-ый класс)Время отправки: 16 марта 2007, 10:27
 
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 16 марта 2007, 10:04; участников в обсуждении: 1. 
|   | Наташа (статус: Посетитель), 16 марта 2007, 10:04 [#1]:Спасибо. Уже получилось: procedure TForm1.Button1Click(Sender: TObject);
 var Buffer: array[0..MAX_PATH] of Char;
 sz
  Word; Result: String;
 begin
 sz:=MAX_PATH-1;
 if windows.GetUserName(Buffer,sz) then
 begin
 if sz>0 then dec(sz);
 SetString(Result,Buffer,sz);
 end
 else
 begin
 Result:='Error '+inttostr(GetLastError);
 end;
 ShowMessage(trim(Result));
 end;
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |