Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
typeTHostInfo = record
username: PWideChar; logon_domain: PWideChar; other_domains: PWideChar; logon_server: PWideChar; end
; WKSTA_USER_INFO_0 = packed
record
wkui0_username: PWideChar; end
; PWKSTA_USER_INFO_0 = ^WKSTA_USER_INFO_0; implementation
{$R *.dfm} function
NetWkstaUserEnum(servername: PWideChar; // Pointer to a string that specifies the DNS or NetBIOS name of the // remote server on which the function is to execute. // If this parameter is nil, the local computer is used. level: DWORD; // Level = 0 : Return the names of users currently logged on to the workstation. var
bufptr: Pointer; // Pointer to the buffer that receives the data prefmaxlen: DWORD; // Specifies the preferred maximum length of returned data, in bytes. var
entriesread: PDWord; // Pointer to a value that receives the count of elements actually enumerated. var
totalentries: PDWord; // total number of entries var
resumehandle: PDWord) // contains a resume handle which is used to continue an existing search : Longint; stdcall
; external
'netapi32.dll' Name 'NetWkstaUserEnum'; function
EnumNetUsers(HostName: WideString {; Users: TStrings}): THostInfo; const
STR_ERROR_ACCESS_DENIED = 'The user does not have access to the requested information.'; STR_ERROR_MORE_DATA = 'Specify a large enough buffer to receive all entries.'; STR_ERROR_INVALID_LEVEL = 'The level parameter is invalid.'; var
Info: Pointer; ElTotal: PDWord; ElCount: PDWord; Resume: PDWord; Error: Longint; // UI : PWKSTA_USER_INFO_0; // i : Integer; begin
Resume := 0; NetWkstaUserEnum(PWideChar(HostName), 1, Info, 0, ElCount, ElTotal, Resume); Error := NetWkstaUserEnum(PWideChar(HostName), 1, Info, 256 * Integer(ElTotal), ElCount, ElTotal, Resume); case
Error of
ERROR_ACCESS_DENIED: Result.UserName := STR_ERROR_ACCESS_DENIED; ERROR_MORE_DATA: Result.UserName := STR_ERROR_MORE_DATA; ERROR_INVALID_LEVEL: Result.UserName := STR_ERROR_INVALID_LEVEL else
if
Info <> nil
then
begin
Result := THostInfo(info^); { To retrieve all users: UI := PWKSTA_USER_INFO_0(Info); for i := 1 to DWord(ElCount) do begin Users.Add(UI^.wkui0_username); inc(UI); end; } end
else
begin
Result.UserName := 'N/A'; Result.logon_domain := 'N/A'; Result.other_domains := 'N/A'; Result.logon_server := 'N/A'; end
; end
; end
; procedure
TForm1.Button1Click(Sender: TObject); var
HostInfo: THostInfo; begin
// Specify target machine as argument (with or without preceding ) HostInfo := EnumNetUsers('WORKSTATION'); with
HostInfo do
begin
Memo1.Lines.Add(username + #13#10+ logon_domain + #13#10+ other_domains + #13#10+ logon_server); end
; end
;