function GetUsers(GroupName : string;var List : TStrings) :Boolean;
type
  TNetResourceArray = ^TNetResource;
var
  NetResource : TNetResource ;
  Buf : Pointer;
  Count,BufSize,Res : DWord;
  lnd :Integer ;
  lphEnum : THandle ;
  Temp : TNetResourceArray ;
begin
  Result := False;
  List.Clear;
  FillChar(NetResource,SizeOf(NetResource),0);
  NetResource.lpRemoteName := @GroupName[1];
  NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
  NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
  NetResource.dwScope := RESOURCETYPE_DISK;
  Res := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@NetResource,lphEnum);
  if Res <>  NO_ERROR then Exit;
  while True do
  begin
    Count := $FFFFFFFF;
    BufSize := 8192;
    GetMem(Buf,BufSize);
    Res := WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
    if Res = ERROR_NO_MORE_ITEMS then break;
    if (Res <> NO_ERROR) then exit;
    Temp := TNetResourceArray(Buf);
    For lnd :=0 to Count -1 do
    begin
      List.Add(Temp^.lpRemoteName );
      Inc(Temp);
    end;
  end;
  Res := WNetCloseEnum(lphEnum);
  if Res <> NO_ERROR then exit;
  Result := True;
  FreeMem(Buf);
end;

解决方案 »

  1.   

    上面是方法。
    以下是调用。
    procedure TForm2.Button1Click(Sender: TObject);
    var
      List : TStrings;
      i : Integer;
    begin
      Memo1.Clear;
      try
        try
          List := TStringList.Create;
          if GetUsers(Edit1.Text,List) then
            if List.Count = 0 then
            begin
              Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
            end
            else
            begin
              Memo1.Lines.Add(Edit1.Text+'下的计算机如下:');
              for i := 0 to List.Count -1 do
              begin
                Memo1.Lines.Add(List.Strings[i]);
              end;
            end;
        finally
          List.Free;
        end;
      except
        Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
      end;
    end;
      

  2.   

    当我输入: Workgroup 的时候就可以显示出所有的计算机。
    如果我随意的输入一个工作组的时候(不存在的)就什么也不显示。
    //
    if GetUsers(Edit1.Text,List) then
            if List.Count = 0 then
            begin
              Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
            end
    //
    这段语句就不执行。高手帮我。
      

  3.   

    if not GetUsers(Edit1.Text,List) then
     Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');這樣就可