Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

поиск по сети   Найти похожие ветки 

 
Ден   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
3-1095652006
korvin
2004-09-20 07:46
2004.10.17
Компонет печати или запрос?


14-1095965277
lipskiy
2004-09-23 22:47
2004.10.17
Существуют ли электронные карты (местности) в виде


9-1087393359
Ezhik
2004-06-16 17:42
2004.10.17
GLScene


14-1096280659
esu
2004-09-27 14:24
2004.10.17
Сборник забавных картинок про сисадминов :)


1-1096577502
deos
2004-10-01 00:51
2004.10.17
Иконки