UTF.COM.CN

用VC列表显示所有网上邻居

作者:佚名 | 来源:网络 | 添加时间:2006-03-26 22:11:38 | 人气:846

用VC列表显示所有网上邻居

网上邻居的查找在www.codeguru.com上有例子,只是它 
把它做成了类,本是好事,但对大家理解它的原理增加了难度, 
所以现在把它实现在一对话框中,以便大家能一目了然。 

#include <winnetwk.h> 

#pragma comment(lib, “mpr.lib”) 
BOOL CNetEnum2Dlg::Enumerate(LPNETRESOURCE lpNetRC_p) 

HANDLE hEnum = 0; 
DWORD dwScope = RESOURCE_GLOBALNET ; 
DWORD dwType = RESOURCETYPE_ANY ; 

DWORD dwResult = WNetOpenEnum( 
dwScope, // scope of enumeration 
dwType, // resource types to list 
0, // enumerate all resources 
lpNetRC_p, // pointer to resource structure (NULL at first time) 
&hEnum // handle to resource 
) ; 

if( dwResult != NO_ERROR ) 
return FALSE; 


DWORD dwBuffer = 16384 ; // 16K is reasonable size 
DWORD dwEntries = 0xFFFFFFFF ; // enumerate all possible entries 
LPNETRESOURCE lpnrLocal = 0; 

BOOL bRet = TRUE; 

//try 

do 

// first allocate buffer for NETRESOURCE structures ... 
lpnrLocal = (LPNETRESOURCE) GlobalAlloc( GPTR, dwBuffer ) ; 

dwResult = WNetEnumResource( 
hEnum, // resource-handle 
&dwEntries, 
lpnrLocal, 
&dwBuffer 
) ; 

if( dwResult == NO_ERROR ) 

for( register DWORD i = 0 ; i 

CString nsname; 
nsname = lpnrLocal.lpRemoteName; 
nsname += " "; 
nsname +=lpnrLocal.lpLocalName; 
nsname += " "; 
nsname +=lpnrLocal.lpComment; 
m_netList.AddString(nsname); // m_netList defined in NetEnumDlg2.h : CListBox m_netList; 
if( RESOURCEUSAGE_CONTAINER == 
(lpnrLocal.dwUsage & RESOURCEUSAGE_CONTAINER) && 
lpnrLocal.dwDisplayType != RESOURCEDISPLAYTYPE_SERVER ) 
if( !Enumerate( &lpnrLocal) ) 

//TRACE0( "CNetwork::Enumerate(): recursiv call failed\n" ); 
//throw CNetworkBreak(FALSE); 
return FALSE; 



} else if( dwResult != ERROR_NO_MORE_ITEMS ) 

//AfxMessageBox("WNetEnumResource"); 
return FALSE; 

} while( dwResult != ERROR_NO_MORE_ITEMS ); 


if( lpnrLocal ) 
GlobalFree((HGLOBAL) lpnrLocal) ; 

WNetCloseEnum(hEnum) ; 

return bRet; 


void CNetEnum2Dlg::OnListWNet() 

Enumerate(0); 
责任编辑:冬天来了
【字号: 】【去论坛讨论】【发表评论】【打印本文】【告诉好友】【关闭窗口
网友评论(评论内容只代表网友观点,与本站立场无关!)

姓名:

验证码: 点击刷新