当前位置:首页 > 软件开发 > net
firefox

枚举出局域网上所有网络资源

microsoft提供了以下几个api:wnetopenenum、wnetenumresource、wnetcloseenum及一个结构类型netresource用于搜索局域网上的网络资源。

  其中netresource的定义如下:

typedef struct _netresource { // nr
 dword dwscope;
 dword dwtype;
 dword dwdisplaytype;
 dword dwusage;
 lptstr lplocalname;
 lptstr lpremotename;
 lptstr lpcomment;
 lptstr lpprovider;
} netresource;

  我们主要用到是dwtype(资源类型:磁盘或打印机)、dwdisplaytype(资源类型:服务器,域等)、dwusage(判断是不是容器c o ntainer)、lpremotename(资源名称)。

  wnetopenenum的作用是打开某一特定的资源容器句柄给wnetenumresource。wnetenumresource枚举出指定容器下所有网络资源。

  下面是一个列出所有网络资源的的函数示例:

bool __fastcall tform1::enumeratefunc(hwnd hwnd ,lpnetresource lpnr,ttreenode * parentnode)
{
dword dwresult, dwresultenum;
handle henum;
dword cbbuffer = 16384; /* 16k is reasonable size */
dword centries = 0xffffffff; /* enumerate all possible entries */
lpnetresource lpnrlocal; /* pointer to enumerated structures */
dword i;
dwresult = wnetopenenum(resource_globalnet,
resourcetype_any,
0, /* enumerate all resources */
lpnr, /* null first time this function is called */
&henum); /* handle to resource */
if (dwresult ==67) //domain下没有可访问的主机
return true;
if (dwresult != no_error ) { //无
showerror(dwresult);
return false;
}
ttreenode * child;
do {
lpnrlocal = (lpnetresource) globalalloc(gptr, cbbuffer);

dwresultenum = wnetenumresource(henum, /* resource handle */
&centries, /* defined locally as 0xffffffff */
lpnrlocal, /* lpnetresource */
&cbbuffer); /* buffer size */

if (dwresultenum == no_error) {
for(i = 0; i < centries; i++) {
child=treeview1->items->addchild(parentnode,lpnrlocal[i].lpremotename);
if(resourceusage_c o ntainer ==
(lpnrlocal[i].dwusage & resourceusage_c o ntainer))
if(!enumeratefunc(this->handle, &lpnrlocal[i],child))
showmessage("enumeratefunc returned false.");
}
}

else if (dwresultenum != error_no_more_items) {
showerror(dwresultenum);
break;
}
}
while(dwresultenum != error_no_more_items);
globalfree((hglobal) lpnrlocal);
dwresult = wnetcloseenum(henum);
if(dwresult != no_error) {
showerror(dwresult);
return false;
}
return true;
}

  需要说明在win98下,此方法列出的资源和网络邻居列出的是一样,和网络邻居一样,有时列出的数据并不准确,可能会有一些域或机器不能找到。

 ↓相关文章:
© 2006-2008 All Rights Reserved