Форум: "Сети";
Текущий архив: 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