|
Вопрос # 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;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|