this slowpoke moves

Get all Computers in Network

private
    function FindComputers: DWORD;
    
var
  Form1: TForm1;
  Computers : TStringList;
  
const
  MaxEntries = 1000;  // Anzahl der Maximalen Computers im Netzwerk
    
//

function TForm1.FindComputers: DWORD;
var
  EnumWorkGroupHandle, EnumComputerHandle: THandle;
  EnumError: DWORD;
  Network: TNetResource;
  WorkGroupEntries, ComputerEntries: DWORD;
  EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
  EnumBufferLength: DWORD;
  I, J: DWORD;
begin
  Computers.Clear;

  FillChar(Network, SizeOf(Network), 0);
  with Network do
  begin
    dwScope := RESOURCE_CONNECTED;
    dwType  := RESOURCETYPE_ANY;
    dwUsage := RESOURCEUSAGE_CONTAINER;
    lpRemoteName := PCHAR(Edit1.Text);
  end;

  EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0,
    @Network, EnumWorkGroupHandle);

  if EnumError = NO_ERROR then
  begin
    WorkGroupEntries := MaxEntries;
    EnumBufferLength := SizeOf(EnumWorkGroupBuffer);
    EnumError        := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries,
      @EnumWorkGroupBuffer, EnumBufferLength);

    if EnumError = NO_ERROR then
    begin
      for I := 1 to WorkGroupEntries do
      begin
        EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0,
          @EnumWorkGroupBuffer[I], EnumComputerHandle);
        if EnumError = NO_ERROR then
        begin
          ComputerEntries  := MaxEntries;
          EnumBufferLength := SizeOf(EnumComputerBuffer);
          EnumError        := WNetEnumResource(EnumComputerHandle, ComputerEntries,
            @EnumComputerBuffer, EnumBufferLength);
          if EnumError = NO_ERROR then
            for J := 1 to ComputerEntries do
              Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName,
                1, Length(EnumComputerBuffer[J].lpRemoteName)));
          WNetCloseEnum(EnumComputerHandle);
        end;
      end;
    end;
    WNetCloseEnum(EnumWorkGroupHandle);
  end;

  if EnumError = ERROR_NO_MORE_ITEMS then
    EnumError := NO_ERROR;
  Result := EnumError;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
  FindComputers;
  ListBox1.Items := Computers;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Text := ListBox1.Items[ListBox1.ItemIndex];
end;

//

initialization
  Computers := TStringList.Create;
finalization
  Computers.Free;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate