Главная страница
    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.036 c
3-1103010445
Zilog
2004-12-14 10:47
2005.01.16
БД + потоки


1-1104720522
Nes
2005-01-03 05:48
2005.01.16
Как программку, которая формирует нелинейный список?


1-1104227614
AC
2004-12-28 12:53
2005.01.16
CheckListBox Как убрать переключатели у отдельных пунктов?


3-1102667724
galexis
2004-12-10 11:35
2005.01.16
Вопрос от недопонимания транзакций.


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