Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 411

/ вопрос открыт /

Как получить login пользователя под которым он входит в операционную систему,в сеть?
GetUserName(lpBuffer,nSize); - практический пример, если можно

Наташа Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Наташа (статус: Посетитель)
Вопрос отправлен: 16 марта 2007, 09:46
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Роман

Здравствуйте, Наташа!Значит так,имя текущего пользователя оси можно узнать к примеру так(1),или так(2).Получить список зарегистрированных под NT пользователей можно так(3).

Приложение:
  1. 1.==============================
  2. function GetCurrentUserName: string;
  3. const
  4. cnMaxUserNameLen = 254;
  5. var
  6. sUserName: string;
  7. dwUserNameLen: DWORD;
  8. begin
  9. dwUserNameLen := cnMaxUserNameLen - 1;
  10. SetLength(sUserName, cnMaxUserNameLen);
  11. GetUserName(PChar(sUserName), dwUserNameLen);
  12. SetLength(sUserName, dwUserNameLen);
  13. Result := sUserName;
  14. end;
  15. 2.========================================
  16. const
  17. NameUnknown = 0; // Unknown name type.
  18. NameFullyQualifiedDN = 1; // Fully qualified distinguished name
  19.  
  20. NameDisplay = 3; // A "friendly" display name
  21. NameUniqueId = 6; // GUID string that the IIDFromString function returns
  22. NameCanonical = 7; // Complete canonical name
  23. NameUserPrincipal = 8; // User principal name
  24. NameCanonicalEx = 9;
  25. NameServicePrincipal = 10; // Generalized service principal name
  26. DNSDomainName = 11; // DNS domain name, plus the user name
  27.  
  28.  
  29. procedure GetUserNameEx(NameFormat: DWORD;
  30. lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
  31. external 'secur32.dll' Name 'GetUserNameExA';
  32.  
  33.  
  34. function LoggedOnUserNameEx(fFormat: DWORD): string;
  35. var
  36. UserName: array[0..250] of char;
  37. Size: DWORD;
  38. begin
  39. Size := 250;
  40. GetUserNameEx(fFormat, @UserName, @Size);
  41. Result := UserName;
  42. end;
  43.  
  44. procedure TForm1.Button1Click(Sender: TObject);
  45. begin
  46. Edit1.Text := LoggedOnUserNameEx(NameSamCompatible);
  47. end;
  48. 3.======================================
  49. type
  50. USER_INFO_1 = record
  51. usri1_name: LPWSTR;
  52. usri1_password: LPWSTR;
  53. usri1_password_age: DWORD;
  54. usri1_priv: DWORD;
  55. usri1_home_dir: LPWSTR;
  56. usri1_comment: LPWSTR;
  57. usri1_flags: DWORD;
  58. usri1_script_path: LPWSTR;
  59. end;
  60. lpUSER_INFO_1 = ^USER_INFO_1;
  61.  
  62. function NetUserEnum(ServerName: PWideChar;
  63. Level,
  64. Filter: DWORD;
  65. var Buffer: Pointer;
  66. PrefMaxLen: DWORD;
  67. var EntriesRead,
  68. TotalEntries,
  69. ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll';
  70.  
  71. function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external
  72. 'netapi32.dll';
  73.  
  74. {...}
  75.  
  76. procedure TForm1.Button1Click(Sender: TObject);
  77. var
  78. EntiesRead: DWORD;
  79. TotalEntries: DWORD;
  80. UserInfo: lpUSER_INFO_1;
  81. lpBuffer: Pointer;
  82. ResumeHandle: DWORD;
  83. Counter: Integer;
  84. NetApiStatus: LongWord;
  85. begin
  86. ResumeHandle := 0;
  87. repeat
  88. // NetApiStatus :=
  89. // NetUserEnum(PChar('\NT-Domain'), 1, 0, lpBuffer, 0,EntiesRead, TotalEntries, ResumeHandle);
  90. NetApiStatus := NetUserEnum(nil, 1, 0, lpBuffer, 0, EntiesRead,
  91. TotalEntries, ResumeHandle);
  92. UserInfo := lpBuffer;
  93.  
  94. for Counter := 0 to EntiesRead - 1 do
  95. begin
  96. listbox1.Items.Add(WideCharToString(UserInfo^.usri1_name) + ' --> ' +
  97. WideCharToString(UserInfo^.usri1_comment));
  98. Inc(UserInfo);
  99. end;
  100.  
  101. NetApiBufferFree(lpBuffer);
  102. until (NetApiStatus <> ERROR_MORE_DATA);
  103. 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:DWord;
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;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.02 сек.