如何在自己的Listview中显示我的电脑和网络邻居

解决方案 »

  1.   

    查看MSDN中WNetEnumResource的帮助吧。
      

  2.   

    问题分成两个1。如何获取网络邻居
    2。如何在Listview中加入数据
    分别查找一下,很多的
      

  3.   

    我这自己做了一个朋友可以参考,但是你有没有关于tapi.pas 文件的信息,如果
    有咱们交换一下,何如?
      

  4.   

    做一个 TListView ,TListView 有两个 Item ,一个放上 My Computer Icon,另一个放上 Network Neighbour icon 呀!!!Double click 之后的东西,看看楼上的兄弟们吧!哈哈,灌水!
      

  5.   

    //得到工作组和机器名
    type
      PnetResourceArr = ^TNetResource;
       private
        { Private declarations }
      public
        procedure GetServerList(node: TTreeNodes);
        procedure GetUserList(fServer:string;node: TTreeNodes; Pnode: TTreeNode);
        { Public declarations }
      end;
    implementation{$R *.dfm}{ TForm1 }
    // 得到工作组列表
    procedure TForm1.GetServerList(node: TTreeNodes);
    Type
      {$H+}
      PMyRec = ^MyRec;
      MyRec = Record
                dwScope      : Integer;
                dwType        : Integer;
                dwDisplayType : Integer;
                dwUsage      : Integer;
                LocalName    : String;
                RemoteName    : String;
                Comment      : String;
                Provider      : String;
              End;
      {H-}
    Var
      NetResource : TNetResource;
      TempRec    : PMyRec;
      Buf        : Pointer;
      Count,
      BufSize,
      Res        : DWORD;
      lphEnum    : THandle;
      p          : PNetResourceArr;
      i,
      j          : SmallInt;
      NetworkTypeList : TList;
      cnode: TTreeNode;
    begin
    // Result := False;  NetworkTypeList := TList.Create;
      node.BeginUpdate;
      node.Clear;
      GetMem(Buf, 8192);
      Try
        Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        Count := $FFFFFFFF;
        BufSize := 8192;
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
        If Res = ERROR_NO_MORE_ITEMS Then Exit;
        If (Res <> 0) Then Raise Exception(Res);
        P := PNetResourceArr(Buf);
        For I := 0 To Count - 1 Do
        Begin
          New(TempRec);
          TempRec^.dwScope := P^.dwScope;
          TempRec^.dwType := P^.dwType ;
          TempRec^.dwDisplayType := P^.dwDisplayType ;
          TempRec^.dwUsage := P^.dwUsage ;
          TempRec^.LocalName := StrPas(P^.lpLocalName);
          TempRec^.RemoteName := StrPas(P^.lpRemoteName);
          TempRec^.Comment := StrPas(P^.lpComment);
          TempRec^.Provider := StrPas(P^.lpProvider);
          NetworkTypeList.Add(TempRec);
          Inc(P);
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        For J := 0 To NetworkTypeList.Count-1 Do
        Begin
          TempRec := NetworkTypeList.Items[J];
          NetResource := TNetResource(TempRec^);
          Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
          If Res <> 0 Then Raise Exception(Res);
          While true Do
          Begin
            Count := $FFFFFFFF;
            BufSize := 8192;
            Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
            If Res = ERROR_NO_MORE_ITEMS Then Break;
            If (Res <> 0) Then Raise Exception(Res);
            P := PNetResourceArr(Buf);
            For I := 0 To Count - 1 Do
            Begin
              cnode := node.Add(nil, P^.lpRemoteName);
              //node.Item[i].ImageIndex := 0;
             //node.Item[i].SelectedIndex := 0;
             cnode.ImageIndex := 0 ;
             node.AddChildFirst(cnode, 'test');
             inc(P);
            End;
          End;
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        //Result := True;
        Finally
          FreeMem(Buf);
          NetworkTypeList.Destroy;
      End;
      node.EndUpdate;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      GetServerList(TreeView1.Items);
    end;
    //得到机器列表
    procedure TForm1.GetUserList(fServer: string; node: TTreeNodes;Pnode: TTreeNode);
    Var
      NetResource : TNetResource;
      Buf        : Pointer;
      Count,
      BufSize,
      Res        : DWord;
      Ind        : Integer;
      lphEnum    : THandle;
      Temp        : PNetResourceArr;
      cnode : TTreeNode;
    Begin
      //List.Clear;
      GetMem(Buf, 8192);
      Try
        FillChar(NetResource, SizeOf(NetResource), 0);
        NetResource.lpRemoteName := @fServer[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 <> 0 Then Exit;
        While True Do
        Begin
          Count := $FFFFFFFF;
          BufSize := 8192;
          Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
          If Res = ERROR_NO_MORE_ITEMS Then Exit;
          If (Res <> 0) then Exit;
          Temp := PNetResourceArr(Buf);
          For Ind := 0 to Count - 1 do
          Begin
            cnode :=  node.AddChild(Pnode, Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }
            cnode.ImageIndex := 1;
            Inc(Temp);
          End;
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
      Finally
        FreeMem(Buf);
      End;
    end;
    end.
    其实如果要得到我的电脑和这些东西,DELPHI有现成的SHELL控件