| VB 源码 | VC 源码 | ASP源码 | JSP源码 | PHP源码 | CGI源码 | FLASH源码 | 素材模板 | C 源程序 | 站长工具 | 站长教程 |

网络应用

网站运营
网络应用
服务器
搜索优化

本类阅读TOP10

·盗QQ密码高手FalseQQ
·邮箱及浏览器安全设置指南
·提高BT下载速度全攻略之优化配置BitComet
·注册码大全
·教你如何修改文件日期
·恢复硬盘数据
·如何抢救损坏的ZIP文件?
·IE浏览器常见经典故障“写真集”
·如何清除上网信息?教你在网吧安全上网
·Real Player10使用技巧

站内搜索

网络资源的列举

针对于局域网的编程中常常需要我们得到局域网上一些相关信息,本文即是用编程实现共享资源的列举

首先来看一下我们要用到的两个相关API函数:

◆DWORD WNetOpenEnum(

DWORD dwScope, // 指定列举范围
DWORD dwType, // 列举资源的类型
DWORD dwUsage, // 指定列举资源的使用情况
LPNETRESOURCE lpNetResource, // 指向NETRESOURCE结构的指针,指定要列举的资源
LPHANDLE lphEnum //指向列举句柄,用在后面的WnetEnumResource中
);

参数dwScope可以是下列值之一或其组合:

RESOURCE_CONNECTED 所有当前连接着的资源(将忽略dwUsage参数)
RESOURCE_GLOBALNET 所有的网络资源
RESOURCE_REMEMBERED 所有记住的(永久)连接(将忽略dwUsage参数)

参数dwType可以是下列值之一或其组合:

RESOURCETYPE_ANY 所有资源(不能与RESOURCETYPE_DISK和RESOURCE_PRINT组合)
RESOURCETYPE_DISK 仅所有磁盘资源
RESOURCETYPE_PRINT 仅所有打印资源

参数dwUsage可以是下列值之一或其组合:

0 所有资源
RESOURCEUSAGE_CONNECTABLE 所有可连接的资源
RESOURCEUSAGE_CONTAINER 所有包容器资源

参数lpNetResource指向NETRESOURCE结构,该结构指定了要列举的包容器(container),如果此参数为NULL则表示列举网络的根(root)

函数调用正确的话, 返回值为NO_ERROR,否则返回下列错误代码之一:

ERROR_NOT_CONTAINER 表示lpNetResource参数没有指向包容器
ERROR_INVALID_PARAMETER dwScope或dwType参数无效或参数组合错误
ERROR_NO_NETWORK 没有网络存在

◆DWORD WNetEnumResource(

HANDLE hEnum, // 列举句柄
LPDWORD lpcCount, // 列举资源最大个数
LPVOID lpBuffer, // 指向接收列举结果的缓冲区,填充的实际是NETRESOURCE结构数组的形式
LPDWORD lpBufferSize // 指向一个DWORD变量,该变量指出了lpBuffer的大小
);

这两个函数中都用到了一个重要的结构NETRESOURCE,NETRESOURCE结构如下:

typedef struct _NETRESOURCEA {
DWORD dwScope;// 指定列举范围
DWORD dwType;// 列举资源的类型
DWORD dwDisplayType;//网络对象展示给用户的类型
DWORD dwUsage;// 指定列举资源的使用情况
LPSTR lpLocalName;//本地设备名
LPSTR lpRemoteName;//远程设备名
LPSTR lpComment ;
LPSTR lpProvider;//资源提供者的名字
}NETRESOURCE;
参数dwDisplayType可以是下列值之一:
RESOURCEDISPLAYTYPE_DOMAIN 显示为一个DOMAIN
RESOURCEDISPLAYTYPE_GENERIC
RESOURCEDISPLAYTYPE_SERVER 显示为一个服务器
RESOURCEDISPLAYTYPE_SHARE 显示为一个共享资源

关于WNetEnumResource的调用参数都很简单,这里就不再详细指出了,下面我们用编程实现列举所有网络资源,并将其填充到一个TTreeView中

首先打开C++Builder创建一个新程序

然后在Unit1.cpp的首部写入下面的函数:

bool __fastcall GetNetRes(TTreeNodes *Nodes,TTreeNode * Node, NETRESOURCE * pNetResource, int Depth)
{
//这是一个嵌套函数,其中Nodes为指定TListView实例的Items,Node为从指定节点扩展NULL为跟节点,pNetResource为列举根,
//Depth为列//举深度,填入一个小于0的数,则深度为无穷,直到列举完毕
#define ENUMBUFSIZE (16*1024)
#define ENUMCOUNT 10
if (Nodes==NULL) return false;
if (Depth==0) return true;
HANDLE hEnum;
bool reValue=true;
NETRESOURCE *pNetRes,NetRes;
if(WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,pNetResource,&hEnum)!=NO_ERROR) return false;
char Buf[ENUMBUFSIZE];
DWORD ECount=ENUMCOUNT;
DWORD ESize=ENUMBUFSIZE;
DWORD EnumRst;
do{
EnumRst=WNetEnumResource(hEnum,&ECount,Buf,&ESize);
if (ESize>ENUMBUFSIZE) return false;
if (EnumRst==NO_ERROR){
for (DWORD num=0;num pNetRes=((NETRESOURCE*)(Buf+sizeof(NETRESOURCE)*num));
TTreeNode *tNode=Nodes->AddChild(Node,AnsiString(pNetRes->lpRemoteName));
if (pNetRes->dwDisplayType!=RESOURCEDISPLAYTYPE_SHARE)
if(!GetNetRes(Nodes,tNode,pNetRes,Depth-1)) reValue=false;
}
}
}while(ECount==ENUMCOUNT);
if (EnumRst!=ERROR_NO_MORE_ITEMS&&EnumRst!=NO_ERROR) reValue=false;
WNetCloseEnum(hEnum);
return reValue;
}

然后在TForm1的FormCreate事件中,写入代码,如下:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Caption="列举网络资源实例";
TTreeView *TreeView1=new TTreeView(this);//创建一个TTreeView实例
TreeView1->Parent=this;
TreeView1->Left=10;
TreeView1->Top=10;
TreeView1->Width=ClientWidth-20;
TreeView1->Height=ClientHeight-20;
if (!GetNetRes(TreeView1->Items,NULL,NULL,-1))//调用GetNetRes函数,从网络的根列举,并将数据添加到TreeView1的根节点
ShowMessage("列举中出现了错误,可能是由一些资源的访问需要用户名和密码引起的!");
if (TreeView1->Items->Item[0]!=NULL)
TreeView1->Items->Item[0]->Expand(false); //展开
}





相关文章
  • 我想象的未来IT世界
  • 冷静看待互联网泡沫
  • 抄袭成风,中国互联网之伤
  • 互联网公司的七大真相
  • 360上市外的种种寂寞
  • 可爱的互联网精神
  • 美网站列举谷歌2010十大新闻
  • 金山卫士开源恐成一场闹剧
  • 网民之谈
  • 中国的互联网公司是怎么衰落的
  • 互联网公司的7种衰亡方式
  • 十大杀手级iPhone商业协作应用
  • 中国互联网不规矩
  • 点评“马云的信仰”
  • 崛起的360
  • 互联网前途渺茫,创业者需谨慎
  • 谁是中国网络基础应用
  • IT娱乐圈
  • 电子书阅读器产品分析
  • 中国互联网发展的两个瓶颈
  • 相关软件

  • 你想知道拨号网络连通后的动态小图标  
  • 利用Winsock做的网络程序  
  • 调制解调器网络编程  
  • 网络对话程序  
  • 列举网络上所有资源  
  • 通过网络传输并对MPEG进行解码的程序  
  • 网络工具  
  • 抢先式多线程网络蜘蛛  
  • 网络电脑列表  
  • 网络聊天工具原代码  

  • 下载首页关于我们广告服务联系方式常见问题隐私声明法律条款本站声明下载帮助发布软件站点地图谷歌卫星地图