用以下方法可以得到某一工作组内的所有主机或某一主机内的所有共享文件夹名
procedure TSearchFileThread.Execute;//线程
Var
  EnumHandle                : THandle;
  FileRS                     : TNetResource;
  Buf                       : Array[1..500] of TNetResource;
  BufSize                   : DWord;
  Entries                   : DWord;
  Result                    : Integer;
begin
  mydir := mydir + #0;//mydir为工作组名时可以得到组内所有主机名
                      //mydir为主机名时可以得到机内所有共享文件夹名
  FillChar(FileRS, SizeOf(FileRS) , 0);
  With FileRS do begin
    dwScope := 2;
    dwType := 3;
    dwDisplayType := 1;
    dwUsage := 2;
    lpRemoteName := @mydir[1];
  end;
  WNetOpenEnum( RESOURCE_GLOBALNET,
                RESOURCETYPE_ANY,
                0,
                @FileRS,
                EnumHandle );
  Repeat
    Entries := 1;
    BufSize := SizeOf(Buf);
   Result := WNetEnumResource( EnumHandle,Entries,@Buf,BufSize );
   If (Result = NO_ERROR) and (Entries = 1) then 
   begin
      s:= StrPas(Buf[1].lpRemoteName); //得到网上资源名,主机或文件夹
      Synchronize(AddFile); //Form1.ListBox1.Items.Add(s);
    end ; 
  Until (Entries <> 1) or (Result <> NO_ERROR);
  WNetCloseEnum( EnumHandle );
end;  
  Found := FindFirst(mydir+'\*.*', $0000003F , searchrec);
    while Found = 0 do
    begin
      listBox1.items.Add(searchrec.name);
      Found := FindNext(SearchRec);
    end;
    FindClose(SearchRec);

解决方案 »

  1.   

    Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean;
    Var
      NetResource : TNetResource;
      Buf : Pointer;
      Count,BufSize,Res : DWord;
      Ind : Integer;
      lphEnum : THandle;
      Temp : TNetResourceArray;
    Begin
      Result := False;
      List.Clear;
      FillChar(NetResource, SizeOf(NetResource), 0);  //初始化网络层次信息
      NetResource.lpRemoteName := @UserName[1];      //指定计算机名称
      Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
      //获取指定计算机的网络资源句柄
    If Res <> NO_ERROR Then exit;                  //执行失败
      While True Do                                  //列举指定工作组的网络资源
      Begin
        Count := $FFFFFFFF;                            //不限资源数目
        BufSize := 8192;                              //缓冲区大小设置为8K
        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 Ind := 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;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      List:TstringList;
      i:integer;
    begin
    try
      List:=TstringList.Create;
      if GetUserResource(edit1.text,List) then
        if List.count=0 then        //指定计算机下没有找到共享资源
          begin
            memo1.Lines.Add (edit1.text+'下没有找到共享资源!');
          end
      else
        memo1.Lines.Add (edit1.text+'下的所有共享资源如下:');
        for i:=0 to List.Count-1  do
          begin
            Memo1.lines.Add (List.strings[i]);
          end;
    finally
      List:=TstringList.Create;    //如有异常则释放分配的资源
    end;
    end;
      

  2.   

    to : byc6352(雪原)
     TNetResourceArray类型在哪儿说明的?我加了句
       type
           tnetresourcearray=array[0..1023] of tnetresource;
    但 Temp := TNetResourceArray(Buf)通不过。
      

  3.   

    procedure TSearchFileThread.Execute;//线程
    Var
      EnumHandle                : THandle;
      FileRS                     : TNetResource;
      Buf                       : Array[1..500] of TNetResource;
      BufSize                   : DWord;
      Entries                   : DWord;
      Result                    : Integer;
    begin
      mydir := mydir + #0;//mydir为工作组名时可以得到组内所有主机名
                          //mydir为主机名时可以得到机内所有共享文件夹名
      FillChar(FileRS, SizeOf(FileRS) , 0);
      With FileRS do begin
        dwScope := 2;
        dwType := 3;
        dwDisplayType := 1;
        dwUsage := 2;
        lpRemoteName := @mydir[1];
      end;
      WNetOpenEnum( RESOURCE_GLOBALNET,
                    RESOURCETYPE_ANY,
                    0,
                    @FileRS,
                    EnumHandle );
      Repeat
        Entries := 1;
        BufSize := SizeOf(Buf);
       Result := WNetEnumResource( EnumHandle,Entries,@Buf,BufSize );
       If (Result = NO_ERROR) and (Entries = 1) then 
       begin
          s:= StrPas(Buf[1].lpRemoteName); //得到网上资源名,主机或文件夹
          Synchronize(AddFile); //Form1.ListBox1.Items.Add(s);
        end ; 
      Until (Entries <> 1) or (Result <> NO_ERROR);
      WNetCloseEnum( EnumHandle );
    end;
      

  4.   

    在ip地址框输入你想察看的机器的IP