请问如何找到网上邻居的列表?我在网上找了很多代码,可是都不能用,请各位帮个忙有能用的代码,请帮一下小弟!

解决方案 »

  1.   

    找网上邻居的列表应该是很简单的!在dos 提示符下用net view 就可以的!而在delphi中完全可以调用这样的方法<当然有专门的API函数>,我在delphi中用调用帮你看看:自己再修改吧 !
    procedure TForm1.IP2Click(Sender: TObject);
    var t:integer;
    begin
    //   if fileexists('c:\zh_ang.tx') then deletefile('c:\zh_ang.tx');
       try
          t:=winexec(pchar('command.com /C '+'net view'+' >'+'c:\zh_ang.tx'),sw_hide);
       except
          exit;
       end;
      try
       if t<32 then showmessage('本次操作失败');
       if t>31 then    //winexec的成功返回值大于31
         begin
           while not fileexists('c:\zh_ang.tx') do  sleep(1000);
           if  fileexists('c:\zh_ang.tx') then
               memo1.Lines.LoadFromFile('c:\zh_ang.tx');//现在在memo中保存记录
         end;
        messagedlg('请注意,操作完成',mtinformation,[mbOk],0);
       except
        messagedlg('请注意,本次操作失败,请重试一编',mterror,[mbOk],0);
       end;
    end;
      

  2.   

    我试了一下下面的代码,可是  调用函数时出错,为什么呢
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, Buttons;type
    TNetResourceArray = ^TNetResource;//
      TForm1 = class(TForm)
        Button1: TButton;
        BitBtn1: TBitBtn;
        procedure Button1Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.dfm}Function GetServerList( var List : TStringList ) : Boolean;
    Var
      NetResource : TNetResource;
      Buf                 : Pointer;
      Count,BufSize,Res   : DWORD;
      lphEnum         : THandle;
      p                     : TNetResourceArray;
      i,j                   : SmallInt;
      NetworkTypeList : TList;
    Begin
      Result := False;
      NetworkTypeList := TList.Create;  List.Clear;
    //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
          Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                               RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
          If Res <> NO_ERROR Then exit;//Raise Exception(Res);//执行失败
    //获取整个网络中的网络类型信息
          Count := $FFFFFFFF;//不限资源数目
          BufSize := 8192;//缓冲区大小设置为8K
          GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
          Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
          If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕
          or (Res <> NO_ERROR )//执行失败
          Then Exit;
          P := TNetResourceArray(Buf);
          For I := 0 To Count - 1 Do//记录各个网络类型的信息
          Begin
              NetworkTypeList.Add(p);
              Inc(P);
          End;      //WNetCloseEnum关闭一个列举句柄
          Res := WNetCloseEnum(lphEnum);//关闭一次列举
          If Res <> NO_ERROR Then exit;      For J := 0 To NetworkTypeList.Count-1 Do //列出各个网络类型中的所有工作组名称
          Begin//列出一个网络类型中的所有工作组名称
              NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息
    //获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
              Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                                  RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
              If Res <> NO_ERROR Then break;//执行失败          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 ) //资源列举完毕
                  or (Res <> NO_ERROR) //执行失败
                  then break;
                  P := TNetResourceArray(Buf);
                  For I := 0 To Count - 1 Do//列举各个工作组的信息
                  Begin
                      List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称
                      Inc(P);
                  End;
              End;
              Res := WNetCloseEnum(lphEnum);//关闭一次列举
              If Res <> NO_ERROR Then break;//执行失败
          End;
          Result := True;
          FreeMem(Buf);
          NetworkTypeList.Destroy;
    End;
    Function GetUsers( GroupName : 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 := @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;//缓冲区大小设置为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
                 //获取工作组的计算机名称,+2表示删除"\($%$43%^#ASD#2@$#f$%^),如\\wangfajun=>wangfajun
                 List.Add(Temp^.lpRemoteName + 2);
                 Inc(Temp);
             End;
         End;
         Res := WNetCloseEnum(lphEnum);//关闭一次列举
         If Res <> NO_ERROR Then exit;//执行失败
         Result := True;
         FreeMem(Buf);
    End;
    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
                 //获取指定计算机中的共享资源名称,+2表示删除"\($%$43%^#ASD#2@$#f$%^),
                 //如\\wangfajun=>wangfajun
                  List.Add(Temp^.lpRemoteName + 2);
                  Inc(Temp);
              End;
          End;
         Res := WNetCloseEnum(lphEnum);//关闭一次列举
         If Res <> NO_ERROR Then exit;//执行失败
         Result := True;
         FreeMem(Buf);
    End;procedure TForm1.Button1Click(Sender: TObject);
    var ListER : TStringList;
    begin
    GetServerList( ListER);
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    var    List : TStringList;
    beginGetUsers( 'Mshome',List)  ;
    end;end.
      

  3.   

    获取的函数没有错误,主要是你的字符串列表没有初始化,
    procedure TForm1.Button1Click(Sender: TObject);
    var 
     ListER : TStringList;
    begin
     ListER := TStringList.Create; //初始化
     GetServerList( ListER);
     ListER.Free; //释放
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    var    
     ListUser : TStringList;
    begin
     ListUser := TStringList.Create; //初始化
     GetUsers( 'Mshome',ListUser)  ;
     ListUser.Free; //释放
    end;