procedure TMainForm.btnGetSessionsClick(Sender: TObject);
var
OS: Boolean;
FLibHandle : THandle;
SessionInfo50:
array [0..512]
of TSessionInfo50;
SessionInfo502 : PSessionInfo502Array;
TotalEntries,EntriesReadNT: DWORD;
EntriesRead,TotalAvial: Word;
i:integer;
begin
lvSessions.Items.Clear;
if not IsNT(
OS)
then Close;
//Выясняем тип системы
if OS then begin //Код для NT
FLibHandle := LoadLibrary('
NETAPI32.DLL');
if FLibHandle = 0
then Exit;
@NetSessionEnumNT := GetProcAddress(FLibHandle, '
NetSessionEnum');
if not Assigned(NetSessionEnumNT)
then
begin
FreeLibrary(FLibHandle);
Exit;
end;
SessionInfo502 :=
nil;
if NetSessionEnumNT(
nil,
nil,
nil,502,@SessionInfo502,DWORD(-1),@entriesreadNT, @totalentries,
nil)=0
then
for i:=0
to EntriesReadNT-1
do
begin
with lvSessions.Items.Add
do //Заполнение данными из структуры
begin
Caption :=
string(SessionInfo502^[i].sesi502_cname);
//Имя компьютера
SubItems.Add(SessionInfo502^[i].sesi502_username);
//Имя пользователя
SubItems.Add(IntToStr(SessionInfo502^[i].sesi502_num_opens));
//Открытых ресурсов
SubItems.Add(CardinalToTimeStr(SessionInfo502^[i].Sesi502_Time));
//Время активное
SubItems.Add(CardinalToTimeStr(SessionInfo502^[i].sesi502_idle_time));
//Время не активное
end;
end;