⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 174.htm

📁 vb功能实例介绍。详细、很好的实例说明。
💻 HTM
字号:
<p>枚举出局域网上所有网络资源 </p>
<p></p>
<p> </p>
<p></p>
<p>  MicroSoft提供了以下几个API:WnetOpenEnum、WnetEnumResource、WNetCloseEnum及一个结构类型NETRESOURCE用于搜索局域网上的网络资源。 </p>
<p></p>
<p>  其中NETRESOURCE的定义如下: </p>
<p></p>
<p>typedef struct _NETRESOURCE { // nr </p>
<p> DWORD dwScope; </p>
<p> DWORD dwType; </p>
<p> DWORD dwDisplayType; </p>
<p> DWORD dwUsage; </p>
<p> LPTSTR lpLocalName; </p>
<p> LPTSTR lpRemoteName; </p>
<p> LPTSTR lpComment; </p>
<p> LPTSTR lpProvider; </p>
<p>} NETRESOURCE;  </p>
<p></p>
<p>  我们主要用到是dwType(资源类型:磁盘或打印机)、dwDisplayType(资源类型:服务器,域等)、dwUsage(判断是不是容器c o ntainer)、lpRemoteName(资源名称)。 </p>
<p></p>
<p>  WnetOpenEnum的作用是打开某一特定的资源容器句柄给WnetEnumResource。WnetEnumResource枚举出指定容器下所有网络资源。 </p>
<p></p>
<p>  下面是一个列出所有网络资源的的函数示例: </p>
<p></p>
<p>bool __fastcall TForm1::EnumerateFunc(HWND hwnd ,LPNETRESOURCE lpnr,TTreeNode * ParentNode) </p>
<p>{ </p>
<p>DWORD dwResult, dwResultEnum; </p>
<p>HANDLE hEnum; </p>
<p>DWORD cbBuffer = 16384; /* 16K is reasonable size */ </p>
<p>DWORD cEntries = 0xFFFFFFFF; /* enumerate all possible entries */ </p>
<p>LPNETRESOURCE lpnrLocal; /* pointer to enumerated structures */ </p>
<p>DWORD i; </p>
<p>dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, </p>
<p>RESOURCETYPE_ANY, </p>
<p>0, /* enumerate all resources */ </p>
<p>lpnr, /* NULL first time this function is called */ </p>
<p>&hEnum); /* handle to resource */ </p>
<p>if (dwResult ==67) //domain下没有可访问的主机 </p>
<p>return true; </p>
<p>if (dwResult != NO_ERROR ) { //无 </p>
<p>ShowError(dwResult); </p>
<p>return false; </p>
<p>} </p>
<p>TTreeNode * Child; </p>
<p>do { </p>
<p>lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer); </p>
<p></p>
<p>dwResultEnum = WNetEnumResource(hEnum, /* resource handle */ </p>
<p>&cEntries, /* defined locally as 0xFFFFFFFF */ </p>
<p>lpnrLocal, /* LPNETRESOURCE */ </p>
<p>&cbBuffer); /* buffer size */ </p>
<p></p>
<p>if (dwResultEnum == NO_ERROR) { </p>
<p>for(i = 0; i < cEntries; i++) { </p>
<p>Child=TreeView1->Items->AddChild(ParentNode,lpnrLocal[i].lpRemoteName); </p>
<p>if(RESOURCEUSAGE_c o nTAINER == </p>
<p>(lpnrLocal[i].dwUsage & RESOURCEUSAGE_c o nTAINER)) </p>
<p>if(!EnumerateFunc(this->Handle, &lpnrLocal[i],Child)) </p>
<p>ShowMessage("EnumerateFunc returned FALSE."); </p>
<p>} </p>
<p>} </p>
<p></p>
<p>else if (dwResultEnum != ERROR_NO_MORE_ITEMS) { </p>
<p>ShowError(dwResultEnum); </p>
<p>break; </p>
<p>} </p>
<p>} </p>
<p>while(dwResultEnum != ERROR_NO_MORE_ITEMS); </p>
<p>GlobalFree((HGLOBAL) lpnrLocal); </p>
<p>dwResult = WNetCloseEnum(hEnum); </p>
<p>if(dwResult != NO_ERROR) { </p>
<p>ShowError(dwResult); </p>
<p>return FALSE; </p>
<p>} </p>
<p>return true; </p>
<p>}  </p>
<p></p>
<p>  需要说明在win98下,此方法列出的资源和网络邻居列出的是一样,和网络邻居一样,有时列出的数据并不准确,可能会有一些域或机器不能找到。 </p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -