Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.033 c
14-1103848005
sirin
2004-12-24 03:26
2005.01.16
Оцените программу


14-1104128840
Rouse_
2004-12-27 09:27
2005.01.16
C Днем Рождения 26 - 27 Декабря


1-1104709238
Дурдом
2005-01-03 02:40
2005.01.16
Как изменть значение указателя?


14-1103266263
Пат
2004-12-17 09:51
2005.01.16
Русские мы или не русские?


14-1104385235
Маг Похмеляйнен
2004-12-30 08:40
2005.01.16
LOL - Поединок в стиле Matrix





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский