VC如何自动获取局域网计算机列表它们的共享目录,使用WNetOpenEnum()、WNetEnumResource(),WNetCloseEnum()能够列出计算机列表,但是怎么获得共享目录

解决方案 »

  1.   

    参考:
    http://topic.csdn.net/t/20040705/12/3146327.html
      

  2.   

    伯虎兄怎么我一发帖你都知道啊?这个链接我看过了,我使用WNetEnumResource能够列出所有计算机名称,但是如何列出它们的共享目录啊?WNetEnumResource能做到吗?还有CFile能够对共享目录进行操作?
      

  3.   

    使用msdn有一个技巧。 就是 知道一个api可以找到他对应的其他api。
      

  4.   

    WNetOpenEnum,WNetEnumResource,WNetCloseEnum
    查阅一下msdn
      

  5.   

    BOOL   EnumLanRes(PACK_HANDLE   *hPack,   NETRESOURCE   *pNetContainer,   DWORD   dwScope,   char   *svSpacer)   
      {   
      DWORD   OpenRet;   
        
      //   Open   network   resource   list   
      HANDLE   hNet;   
      OpenRet=WNetOpenEnum(dwScope,RESOURCETYPE_ANY,0,pNetContainer,&hNet);   
      if   (OpenRet!=NO_ERROR)   
      {   
      pfReply(hPack,CMD_ERROR,0,"LAN   net   open   failed");   
      sprintf(g_szError,"WNetOpenEnum   failed,[%d]",OpenRet);   
      return   FALSE;   
      }   
        
      //   Enumerate   resources   
      int   ret;   
      DWORD   dwCount,dwBufSize;   
      NETRESOURCE   *pNetRes;   
      pNetRes=(NETRESOURCE   *)malloc(16384);   
      if(pNetRes==NULL)   
      {   
      WNetCloseEnum(hNet);   
      pfReply(hPack,CMD_ERROR,0,"ヤカウフヨ愷レエ豐サラ・);   
      return   FALSE;   
      }   
        
      dwCount=1;   
      dwBufSize=8192;   
      ret=WNetEnumResource(hNet,&dwCount,pNetRes,&dwBufSize);   
      while(ret!=ERROR_NO_MORE_ITEMS)   
      {   
      char   *svType,*svLocalName,*svRemoteName,*svComment;   
        
      char   svURLHead[MAX_PATH+1];   
      char   svURLFoot[MAX_PATH+1];   
      svURLHead[0]='\0';   
      svURLFoot[0]='\0';   
        
      int   iNetType;   
        
      switch(pNetRes->dwDisplayType)   
      {   
      case   RESOURCEDISPLAYTYPE_DOMAIN:   
      svType="DOMAIN";   
      iNetType   =   RESOURCE_DOMAIN;   
      break;   
      case   RESOURCEDISPLAYTYPE_GENERIC:   
      svType="GENERIC";   
      iNetType   =   RESOURCE_GENERIC;   
      break;   
      case   RESOURCEDISPLAYTYPE_SERVER:   
      svType="SERVER";   
      iNetType   =   RESOURCE_SERVER;   
      break;   
      case   RESOURCEDISPLAYTYPE_SHARE:   
      switch(pNetRes->dwType)   
      {   
      case   RESOURCETYPE_DISK:   
      svType="FOLDER";   
      iNetType   =   RESOURCE_FOLDER;   
      break;   
      case   RESOURCETYPE_PRINT:   
      svType="PRINTER";   
      iNetType   =   RESOURCE_PRINTER;   
      break;   
      default:   
      svType="UNKNOWN";   
      iNetType   =   RESOURCE_UNKNOWN;   
      break;   
      }   
      break;   
      default:   
      svType="NETWORK";   
      iNetType   =   RESOURCE_NETWORK;   
      break;   
      }   
        
      if(pNetRes->lpLocalName==NULL)   svLocalName="";   
      else   svLocalName=pNetRes->lpLocalName;   
        
      if(pNetRes->lpRemoteName==NULL)   svRemoteName="";   
      else   svRemoteName=pNetRes->lpRemoteName;   
        
      if(pNetRes->lpComment==NULL)   svComment="";   
      else   svComment=pNetRes->lpComment;   
        
      _network_resource   res;   
      memset(&res,0,sizeof(res));   
        
      if(!pNetRes->lpLocalName   &&   !pNetRes->lpRemoteName)   
      {   
      res.iType   =   iNetType;   
      wsprintf(res.Comment,"%.99s",svComment);   
      }   
      else   
      {   
      res.iType   =   iNetType;   
      wsprintf(res.Comment,"%.99s",svComment);   
      wsprintf(res.RemoteName,"%.99s",svRemoteName);   
      wsprintf(res.LocalName,"%.99s",svLocalName);   
      }   
        
      pfReply(hPack,CMD_NETWORK,SUBCMD_RESOURCE,&res);   
        
      //   Recurse   if   necessary   
      if   (pNetRes->dwUsage   &   RESOURCEUSAGE_CONTAINER   &&   dwScope   ==   RESOURCE_GLOBALNET)   
      {   
      char   svSpacer2[100];   
      lstrcpyn(svSpacer2,svSpacer,100);   
      if(lstrlen(svSpacer2)<98)   lstrcat(svSpacer2,"     ");   
      EnumLanRes(hPack,pNetRes,dwScope,svSpacer2);   
      }   
        
      dwCount=1;   
      dwBufSize=16384;   
      ret=WNetEnumResource(hNet,&dwCount,pNetRes,&dwBufSize);   
      }   
      free(pNetRes);   
      WNetCloseEnum(hNet);   
      return   TRUE;   
      }   
      

  6.   

    给你链接只是提供一些相关的资料,更多的时候是靠你自己去动手查阅,调试,即使给你示例代码,也不希望你直接copy下来用,还是要仔细看看。
      

  7.   

    伯虎兄,WNetOpenEnum只是列出局域网内所有的计算机名,但是如何能够得到各个计算机的共享目录资源?
      

  8.   

    函数参数PACK_HANDLE  是什么类型的?
      

  9.   

    问一下NetShareEnum()和WNetEnumResource()做用有什么区别
      

  10.   

    有没有C/C++开源的网络协议类库,实现http/ftp/cifs(smb)协议的?
      

  11.   

    http://www.oschina.net/p/cpp+sockets看一下这个