Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Как узнать с какого компа в сети подключаются к ресурсу на машине   Найти похожие ветки 

 
OlegM   (2004-10-25 09:51) [0]

Здрасте!
Привет всем
Подскажите как можно реализовать такое чтобы как только пользователь подключался к расшареному ресурсу об этом узнать программно ?


 
Дмитрий Ботвин   (2004-10-25 10:08) [1]

Получить список открытых сессий можно так:

procedure TForm1.GetSessions;
 type
   TSessionInfo502 = record
     Sesi502_cname: PWideChar;
     Sesi502_username: PWideChar;
     Sesi502_num_opens: DWORD;
     Sesi502_time: DWORD;
     Sesi502_idle_time: DWORD;
     Sesi502_user_flags: DWORD;
     Sesi502_cltype_name: PWideChar;
     Sesi502_transport: PWideChar;
   end;
 TSessionInfo502Array = array[0..512] of TSessionInfo502;
 PSessionInfo502Array = ^TSessionInfo502Array;
 var
   TotalEntries,EntriesReadNT: DWORD;
   i:integer;
   SessionInfo502 : PSessionInfo502Array;
 begin
   ListView1.Items.Clear;
   SessionInfo502 := nil;
   if NetSessionEnum(nil,nil,nil,502,@SessionInfo502,DWORD(-1),@entriesreadNT, @totalentries, nil)=0 then
   try
     for i:=0 to EntriesReadNT-1 do
       with ListView1.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;
   finally
     NetApiBufferFree(SessionInfo502);
   end;
 end;

Алгоритм тогда будет такой: Пишешь прогу, которая садится в Tray
и через заданный интервал времени запускает указанную процедуру
Если ListView1 не пустой и дополнился новым элементом значит
новый юзер подключился. Пример так....


 
-=SS=- ©   (2004-10-25 10:30) [2]

TFileInfo3 = packed record
  fi3_id          : DWORD;
  fi3_permissions : DWORD;
  fi3_num_locks   : DWORD;
  fi3_pathname    : PWChar;
  fi3_username    : PWChar;
end;
PFileInfo3 = ^TFileInfo3;
TFileInfo3Array = array[0..512] of TFileInfo3;
PFileInfo3Array = ^TFileInfo3Array;

type
 TMibIfRow = packed record
   wszName  : array[0..255] of WideChar;
   dwIndex  : DWORD;
   dwType  : DWORD;
   dwMtu  : DWORD;
   dwSpeed  : DWORD;
   dwPhysAddrLen : DWORD;
   bPhysAddr  : array[0..7] of Byte;
   dwAdminStatus : DWORD;
   dwOperStatus : DWORD;
   dwLastChange : DWORD;
   dwInOctets  : DWORD;
   dwInUcastPkts : DWORD;
   dwInNUCastPkts : DWORD;
   dwInDiscards : DWORD;
   dwInErrors  : DWORD;
   dwInUnknownProtos : DWORD;
   dwOutOctets  : DWORD;
   dwOutUCastPkts : DWORD;
   dwOutNUCastPkts : DWORD;
   dwOutDiscards : DWORD;
   dwOutErrors  : DWORD;
   dwOutQLen  : DWORD;
   dwDescrLen  : DWORD;
   bDescr  : array[0..255] of Char;
 end;
 TMibIfArray = array [0..512] of TMibIfRow;
 PMibIfRow = ^TMibIfRow;
 PmibIfArray = ^TmibIfArray;

 type
TMibIfTable = packed record
  dwNumEntries : DWORD;
  Table     : TMibIfArray;
end;
PMibIfTable = ^ TMibIfTable;

var
 Form1: TForm1;
 GetIfTable:function( pIfTable: PMibIfTable;
    pdwSize : PULONG;
    bOrder : Boolean ): DWORD; stdcall;
 NetFileEnum:function( servername,
    basepath,
    username : PWChar;
    level  : DWORD;
    bufptr  : Pointer;
    prefmaxlen : DWORD;
    entriesread,
    totalentries,
    resume_handle : LPDWORD):DWORD; stdcall;
NetFileClose:function( ServerName :PWideChar;
    FileId :DWORD):DWORD; stdcall;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
type TMAC = array [0..7] of Byte;
 //В качестве первого значения массив, второе значение, размер данных в массиве
 function GetMAC(Value: TMAC; Length: DWORD): String;
 var
   i: Integer;
begin
 if Length = 0 then Result := "00-00-00-00-00-00" else
   begin
     Result := "";
     for i:= 0 to Length -2 do
       Result := Result + IntToHex(Value[i],2)+"-";
     Result := Result + IntToHex(Value[Length-1],2);
   end;
 end;

//Сама процедура
var
 FLibHandle  : THandle;
 Table  : TMibIfTable;
 i,K   : Integer;
 Size    : Integer;
 SP:Integer;
 R:Real;
begin
 Timer1.Enabled := False; //Приостанавливаем на всякий случай таймер
 GetNetUseFile;
//  lvTraffic.Items.BeginUpdate;
//  lvTraffic.Items.Clear;  //Очищаем список
 FLibHandle := LoadLibrary("IPHLPAPI.DLL"); //Загружаем библиотеку
 if FLibHandle = 0 then Exit;
 @GetIfTable := GetProcAddress(FLibHandle, "GetIfTable");
 if not Assigned(GetIfTable) then
 begin
   FreeLibrary(FLibHandle);
   Close;
 end;

 Size := SizeOf(Table);
 if GetIfTable(@Table, @Size, False ) = 0 then //Выполняем функцию
 I:=0;
   begin
       Form1.Label1.Caption:="In : "+IntToStr(Table.Table[i].dwInOctets); //Всего принято байт
       Form1.Label2.Caption:="Out: "+IntToStr(Table.Table[i].dwOutOctets); //Всего отправлено байт
       SP:=(Table.Table[i].dwSpeed);
       K:=1000000;
       Form1.Label3.Caption:=Format("Speed: %f Мб",[SP/K]);
       Form1.Label4.Caption:="Error: "+IntToStr(Table.Table[i].dwInErrors);
   end;
 FreeLibrary(FLibHandle);
 Timer1.Enabled := True; //Не забываем активировать таймер
end;

Procedure Tform1.GetNetUseFile;
var
 FLibHandle : THandle;
 FileInfoNT: PFileInfo3Array;
 FileInfo9x: array [0..512] of TFileInfo3;
 TotalEntries,EntriesReadNT: DWORD;
 EntriesRead,TotalAvial: Word;
 i:integer;
begin
 lvfiles.Items.Clear;
 FLibHandle := LoadLibrary("NETAPI32.DLL");
 if FLibHandle = 0 then Exit;
 @NetFileEnum := GetProcAddress(FLibHandle, "NetFileEnum");
 if not Assigned(NetFileEnum) then
   begin
     FreeLibrary(FLibHandle);
     Exit;
   end;
   FileInfoNT := nil;
   if NetFileEnum(nil,nil,nil,3,@FileInfoNT,DWORD(-1),@entriesreadNT, @totalentries, nil)=0 then
   for i:=0 to EntriesReadNT-1 do
   begin
     with lvfiles.Items.Add do  //Заполнение данными из структуры
     begin
       Caption := string(IntToStr(FileInfoNT^[i].fi3_id)); //Идентификатор
       SubItems.Add(FileInfoNT^[i].fi3_pathname);   //Путь к файлу
       SubItems.Add(FileInfoNT^[i].fi3_username);   //Имя пользователя
     end;
   end;
  FreeLibrary(FLibHandle);
End;


 
OlegM   (2004-10-25 11:43) [3]

Ух спасибки попробуемс)))


 
OlegM   (2004-10-25 12:03) [4]

Эть, ругается Делфя
Undeclared identefier NetSessionEnum
Undeclared identefier CardinalToTimeStr
Undeclared identefier NetApiBufferFree


 
Rouse_ ©   (2004-10-25 12:40) [5]

http://www.delphimaster.ru/articles/netmon/
там описаны нужные тебе функции...


 
OlegM   (2004-10-25 13:18) [6]

Во то что надо пасибки



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
4-1101722965
grigory
2004-11-29 13:09
2005.01.16
Как программно завершить процесс?


1-1103896379
denis24
2004-12-24 16:52
2005.01.16
checkbox в гриде


1-1104328264
Egloo
2004-12-29 16:51
2005.01.16
String vs. WideString в DLL


1-1104669867
lipskiy
2005-01-02 15:44
2005.01.16
Подскажите по инсталляции свой программы для всех пользователей


14-1104124789
NewDelpher
2004-12-27 08:19
2005.01.16
Новогодние шутихи на рабочем столе