RT
分就这么多了,大家见谅!

解决方案 »

  1.   

    http://www.edulife.com.cn/Infos/189912/30189912007601.html
      

  2.   

    用楼上的方法需要uses WINSOCK;用循环的方式可以实现,但效率比较低到vc或vb的论坛去找找,我记得看到过只调用一个方法就能搞定的
      

  3.   

    对API不太清楚,能给我解释一下里面的意思吗?
      

  4.   

    下面的例子可以遍历和你同一网段的所有计算机,既可得工作组又可得用户名和ip,
    你自己加个TListView就行了procedure TForm1.FindIpClick(Sender: TObject);
    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
      lpVerInfo : OSVERSIONINFO;  NetRes,NetRes_User : Array[0..9] of TNetResource;
      ErrCode:integer;
      EnumHandle : THandle;
      I,J,K,Group_No,Total : Integer;
      EnumEntries : DWord;
      BufferSize : DWord;  phe  : PHostEnt;
      pptr : PaPInAddr;
      Buffer : array [0..63] of char;
      GInitData      : TWSADATA;
      IpAddress,GroupName,UserName,lpProvider : string;
      p :pchar;
      ListItem: TListItem;
    begin
      StatusBar1.Panels[0].Text := '正在查询所有网上邻居......';
      delay(1);
      Total := 0;
      With NetRes[0] do
        begin
          dwScope :=RESOURCE_GLOBALNET;
          dwType :=RESOURCETYPE_ANY;
          dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;
          dwUsage :=RESOURCEUSAGE_CONTAINER;
          lpLocalName :=NIL;
          lpRemoteName :=NIL;
          lpComment :=NIL;
          lpProvider :=NIL;
        end;
      ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@NetRes[0],EnumHandle);
      If ErrCode = NO_ERROR then
        begin
          EnumEntries:=100;
          BufferSize:=SizeOf(NetRes);
          //查找组
          ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
          lpProvider := NetRes[0].lpProvider;
          WNetCloseEnum(EnumHandle);
          with ListView1 do
            begin
              Items.Clear;
              Group_No := 0;
              //组          //由于NT或2000多了一个"Microsoft Windows 网络"组,因此要多一次查询组操作
              //如果是win9X,下面这段不要
              lpVerInfo.dwOSVersionInfoSize := SizeOf(lpVerInfo);
              GetVersionEx(lpVerInfo);
              if (lpVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT) then
                begin
                  ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,
                  RESOURCEUSAGE_CONTAINER,@NetRes[Group_No],EnumHandle);
                  EnumEntries:=1024;
                  BufferSize:=SizeOf(NetRes_User);
                  ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[Group_No],BufferSize);
                end;
               //
               
               while ((NetRes[Group_No].lpRemoteName<>nil) and (NetRes[Group_No].lpProvider = lpProvider)) do    //遍历组
                 begin
                   //组用户
                   GroupName := NetRes[Group_No].lpRemoteName;
                   ListItem := Items.Add;
                   Listitem.Caption := GroupName;
                   ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,
                   RESOURCEUSAGE_CONTAINER,@NetRes[Group_No],EnumHandle);
                   EnumEntries:=1024;
                   BufferSize:=SizeOf(NetRes_User);
                   ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes_User[0],BufferSize);
                     IF ErrCode=No_Error then
                       begin
                         I:=0;
                         while ((NetRes_User[I].lpRemoteName<>nil) and (NetRes_User[I].lpProvider = lpProvider)) do  //遍历组用户
                           begin
                             UserName := Copy(NetRes_User[I].lpRemoteName,3,Length(NetRes_User[I].lpRemoteName));
                             p := PChar(UserName);
                             For J:=0 to Length(UserName)-1 do
                               Buffer[J] := p[J];
                             Buffer[J] := #0;
                             //查该机器的ip
                             WSAStartup($101, GInitData);
                             IpAddress := '';
                             phe :=GetHostByName(Buffer);
                             if phe = nil then break;
                             ListItem.SubItems.Add(UserName);
                             pptr := PaPInAddr(Phe^.h_addr_list);
                             K := 0;
                             while pptr^[K] <> nil do
                               begin
                                 IpAddress := StrPas(inet_ntoa(pptr^[K]^));
                                 ListItem.SubItems.Add(IpAddress);
                                 Inc(K);
                               end;
                             ListItem.SubItems.Add(NetRes_User[I].lpComment);
                             WSACleanup;                         I:=I+1;
                             Total := Total + 1;
                             ListItem := Items.Add;
                             Listitem.Caption := '';
                           end;
                       end;
                   ListView1.Items.Delete(ListView1.Items.IndexOf(ListItem));
                   Group_No := Group_No + 1;
                 end;
          end;
      end;
      StatusBar1.Panels[0].Text :='共找到' + IntToStr(Total) + '个用户';
    end;
    你还要在uses里加上WinSock。
      

  5.   

    楼上,请问要懂这些是不是要先学API,应该看什么书好呢?
      

  6.   

    TO:jackie168(花好月圓) ( ) 
    我对API不太熟悉,看不太懂你的代码,看MSDN太郁闷英文很难看呀!
    请问API里面知识这么多,难道你们真的是买本厚厚的书把它啃完吗?想请问应该怎么学习、对待API呢?
      

  7.   

    to lxh84(郁闷的鱼) 
    需要什么就看什么,不是把什么都看好了,再来写做。
      

  8.   

    TO  pick() 
    请问哪本书好点?
      

  9.   

    请问PInAddr是什么类型,用来做什么的,怎么在MSDN都找不到它呀?
      

  10.   

    TO:jackie168(花好月圓) 
    照你的方法做,出现错误:List Out Of Index
    我花了很久时间还是看不太明白你的程序。
      

  11.   

    TO sunmingdong()
    怎么用循环方法呀,好象那个方法要知道计算机的IP才能得到计算机名的,但怎么才能获得局域网全部IP没说。