Jak wyswietlic w Delphi 7 liste uzytkownikow sieci lokalnej

0

Inetresuje mnie jak, za pomoca komponentu indy (upierdliwosc wykladowcy) wyswietlic liste uzytkownikow danej sieci lokalnej. W zasadzie jakich komponentow indy uzyc, bo wczesniej jakos ich nie uzywalem i bylo :(

0

Dzieki za zainteresowanie tematem :P. Dzieki mojej przyjaciolce Asce mam juz mniej wiecej to co chcialem:

type
THostInfo = 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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1