Главная страница
    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.039 c
1-1103929199
serko
2004-12-25 01:59
2005.01.16
Как загрузить процессор?


1-1104402433
Cardinal
2004-12-30 13:27
2005.01.16
Массив как параметр функции


14-1104219018
NewDelpher
2004-12-28 10:30
2005.01.16
Солдаты Великой Отечественной


1-1104254893
Алексей
2004-12-28 20:28
2005.01.16
Загрузка библиотеки


14-1103796920
WondeRu
2004-12-23 13:15
2005.01.16
Выявление самого четкого изображения!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский