Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Внизпоиск по сети Найти похожие ветки
← →
Ден (2004-08-10 07:26) [0]Как и с помощью каких компонентов можно осуществить поиск файлов по сети
← →
Rouse_ © (2004-08-10 10:15) [1]WNetOpenEnum + WNetEnumResource + WNetCloseEnum + FindFirst + FindNext + FindClose + Руки + Голова
← →
Vovochka (2004-08-10 11:44) [2]unit netunit;
interface
uses Windows, Classes;
function GetContainerList(ListRoot:PNetResource):TList;
Type {$H+}
PNetRes = ^TNetRes;
TNetRes = Record
dwScope : Integer;
dwType : Integer;
dwDisplayType : Integer;
dwUsage : Integer;
LocalName : String;
RemoteName : String;
Comment : String;
Provider : String;
End; {H-}
implementation
uses SysUtils;
type PnetResourceArr = ^TNetResource;
{TNetResource - это запись,
эквивалентная TNetRes, за исключением того, что
вместо типов string там типы PChar. }
function GetContainerList(ListRoot:PNetResource):TList;
{возвращает список сетевых имён с подуровня ListRoot, каждый
элемент списка TList - это PNetRes, где поле RemoteName определяет
соответственно сетевое имя элемента списка. Если ListRoot=nil, то
возвращается самый верхний уровень типа:1. Microsoft Windows Network
2. Novell Netware Network
Чтобы получить список доменов/рабочих групп сети Microsoft, нужно
вызвать эту функцию второй раз, передав ей в качестве параметра,
соответствующий элемент списка, полученного при первом её вызове.
Чтобы получить список компьютеров домена - вызвать третий раз...}
{Единственное, я не знаю как узнать имя текущего домена.}
Var
TempRec : PNetRes;
Buf : Pointer;
Count,BufSize, Res : DWORD;
lphEnum : THandle;
p : PNetResourceArr;
i,j : SmallInt;
NetworkList : TList;
Begin
NetworkList := TList.Create;
Result:=nil;
BufSize := 8192;
GetMem(Buf, BufSize);
Try
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_disk,
RESOURCEUSAGE_CONTAINER{0}, ListRoot,lphEnum);
{в результате получаем ссылку lphEnum}
If Res <> 0 Then Raise Exception(Res);
for j:=1 to 100 do
begin
Count := $FFFFFFFF; {требуем выдать столько записей в список, сколько есть}
Res := WNetEnumResource(lphEnum, Count, Buf, BufSize);
{в буфере Buf - списочек
в виде массива указателей на структуры типа TNetResourceArr
а в Count - число этих структур}
If Res = ERROR_NO_MORE_ITEMS Then break;
If (Res <> 0) Then Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin //Требуется копирование из буфера, так как он
New(TempRec); //действителен только до следующего вызова функций группы
{WNet}
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType ;
TempRec^.dwDisplayType := P^.dwDisplayType ;
TempRec^.dwUsage := P^.dwUsage ;
TempRec^.LocalName := StrPas(P^.lpLocalName); {имеются ввиду вот эти указатели}
TempRec^.RemoteName := StrPas(P^.lpRemoteName); {в смысле - строки PChar}
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkList.Add(TempRec);
Inc(P);
End;
//моя дописка
end;
Res := WNetCloseEnum(lphEnum);
{а следующий вызов - вот он!}
If Res <> 0 Then Raise Exception(Res);
Result:=NetWorkList;
Finally
FreeMem(Buf);
end;
End;
end.
основной модуль (отрывок)
procedure TForm1.FindFile(Dir:String);
Var SR:TSearchRec;
FindRes:Integer;
begin
try
FindRes:=FindFirst(Dir+"*.*",faAnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name=".")or(SR.Name="..")) then
begin
FindRes:=FindNext(SR);
Continue; // запустить с новым dir
end;
if ((SR.Attr and faDirectory)=faDirectory) then // если найден каталог, то
begin
FindFile(Dir+SR.Name+"\"); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли
FindRes:=FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск в этом каталоге
Continue; // продолжить цикл
end;
if sr.Name="WIN.INI" then
begin
pppp:=dir;
exit;
end;
FindRes:=FindNext(SR);
end;
finally;
FindClose(SR);
end;
end;
← →
Ден (2004-08-11 10:18) [3]Так какие компоненты надо использовать
← →
DeadMeat © (2004-08-11 12:37) [4]Один мужик объясняет другому как работает троллейбус. Там, мол, у него рога, по ним подается ток на вот этот движок, потом с помощью вот этих шестеренок движутся вот эти колеса и т.п. Второй слушал, слушал и в конце сказал: "Я все это понимаю, но вот чего я понять не могу, так куда бензин заливают?"
Анекдот старый, но почти в тему...
---
...Death Is Only The Begining...
← →
Rouse_ © (2004-08-11 12:51) [5]Орех :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c