Einzelnen Beitrag anzeigen

Dt2158

Registriert seit: 23. Nov 2002
Ort: Berlin
40 Beiträge
 
Delphi 7 Personal
 
#5

Re: Eigenen Arbeitsgruppennamen ermitteln

  Alt 13. Okt 2004, 19:29
ja,die beiden threads hatte ich auch schon gecheckt!
ich wirklich schon alle sinnvollen threads mit "arbeitsgruppe" "domäne" durchgeschaut. Aber alle Threads laufen darauf hinaus alle Rechner im Netzwerk, in einer Arbeitsgruppe anzeigen und deren freigaben.

Ich bin sicher, das die Beispiele ganz dicht an meinem Problem heranführen, aber ich nicht in der Lage bin diese Beispiele umzuschreiben, dass sie mein Problem lösen.

Bitte nehmen wir folgendes Stück Code, was Luckie per Link präsentiert hat!

Code:
type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
                              NetResource: PNetResource;
                              out Entries: DWord;
                              out List: PNetResourceArray): Boolean;
var
  EnumHandle: THandle;
  BufSize: DWord;
  Res: DWord;
begin
  Result := False;
  List := Nil;
  Entries := 0;
  if WNetOpenEnum(RESOURCE_GLOBALNET,
                  ResourceType,
                  0,
                  NetResource,
                  EnumHandle) = NO_ERROR then begin
    try
      BufSize := $4000; // 16 kByte
      GetMem(List, BufSize);
      try
        repeat
          Entries := DWord(-1);
          FillChar(List^, BufSize, 0);
          Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
          if Res = ERROR_MORE_DATA then begin
            ReAllocMem(List, BufSize);
          end;
        until Res <> ERROR_MORE_DATA;

        Result := Res = NO_ERROR;
        if not Result then begin
          FreeMem(List);
          List := Nil;
          Entries := 0;
        end;
      except
        FreeMem(List);
        raise;
      end;
    finally
      WNetCloseEnum(EnumHandle);
    end;
  end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
  Entries: DWord;
  NetResourceList: PNetResourceArray;
  i: Integer;
begin
  if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
    for i := 0 to Integer(Entries) - 1 do begin
      if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
        (NetResourceList[i].dwDisplayType = DisplayType) then begin
        List.AddObject(NetResourceList[i].lpRemoteName,
                      Pointer(NetResourceList[i].dwDisplayType));
      end;
      if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
        ScanLevel(@NetResourceList[i]);
    end;
  finally
    FreeMem(NetResourceList);
  end;
end;

begin
  ScanLevel(Nil);
end;
Code:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;
dieser code listet angeblich alle rechner im netzwerk!
ich brauch aber nur meine arbeitsgruppe.

man bin ich verzweifelt, suche jetzt schon seit gestern eine Lösung.
  Mit Zitat antworten Zitat