2004. február 26., csütörtök

Search for shared folders in a network


Problem/Question/Abstract:

How to search for shared folders in a network

Answer:

You will need a listbox, a radiogroup with 3 radio buttons and of course a button. It takes a while depending on the size of your network.

procedure TForm1.EnumNetResources(List: TStrings);

  procedure EnumFunc(NetResource: PNetResource);
  var
    Enum: THandle;
    Count, BufferSize: DWORD;
    Buffer: array[0..16384 div SizeOf(TNetResource)] of TNetResource;
    i: Integer;
  begin
    if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetResource,
      Enum) = NO_ERROR then
    try
      Count := $FFFFFFFF;
      BufferSize := SizeOf(Buffer);
      while WNetEnumResource(Enum, Count, @Buffer, BufferSize) = NO_ERROR do
        for i := 0 to Count - 1 do
        begin
          case RadioGroup1.ItemIndex of
            0:
              begin {Network Machines}
                if Buffer[i].dwType = RESOURCETYPE_ANY then
                  List.Add(Buffer[i].lpRemoteName);
              end;
            1:
              begin {Shared Drives}
                if Buffer[i].dwType = RESOURCETYPE_DISK then
                  List.Add(Buffer[i].lpRemoteName);
              end;
            2:
              begin {Printers}
                if Buffer[i].dwType = RESOURCETYPE_PRINT then
                  List.Add(Buffer[i].lpRemoteName);
              end;
          end;
          if (Buffer[i].dwUsage and RESOURCEUSAGE_CONTAINER) > 0 then
            EnumFunc(@Buffer[i])
        end;
    finally
      WNetCloseEnum(Enum);
    end;
  end;

begin
  EnumFunc(nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Listbox1.Clear;
  Screen.Cursor := crHourglass;
  EnumNetResources(ListBox1.Items);
  Screen.Cursor := crDefault;
end;

Nincsenek megjegyzések:

Megjegyzés küldése