BOOL CCheckNetWorkDlg::EnumerateNetHood(LPNETRESOURCE lpnr)
{ DWORD dwRet, dwRetEnum;
HANDLE hEnum;
DWORD cbBuffer = 16384;
DWORD cEntries = 0xFFFFFFFF;
LPNETRESOURCE lpnrLocal;
DWORD i; CString str;
int nLevel = -1;
CString strDisplayName;
CString strTrueName;
dwRet = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &hEnum );
if(dwRet == WN_FUNCTION_BUSY || dwRet == ERROR_BAD_NET_NAME)
return TRUE; if(dwRet != NO_ERROR) return FALSE;
do
{
lpnrLocal = (LPNETRESOURCE)GlobalAlloc( GPTR, cbBuffer );
dwRetEnum = WNetEnumResource( hEnum, &cEntries, lpnrLocal, &cbBuffer);
if( dwRetEnum == NO_ERROR)
{
str.LoadString(IDS_NETWORK_PROVIDER); for( i = 0; i < cEntries; i++ )
{
// ProcessMessages(); // 只搜索网络提供者为"Microsoft Network"的资源
int nCmpNo = lstrcmpi( (LPCTSTR)lpnrLocal[i].lpProvider, (LPCTSTR)str);
if( nCmpNo ) continue; // 只包括 Containaer 资源, 共享磁盘和打印机不具有 RESOURCEUSAGE_CONTAINER 属性
if( RESOURCEUSAGE_CONTAINER ==(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
{
nLevel = -1;
switch( lpnrLocal[i].dwDisplayType)
{
case RESOURCEDISPLAYTYPE_NETWORK: // 整个网络
nLevel = 0;
strDisplayName.LoadString(IDS_ENTIRNET);
strTrueName = "*";
break; case RESOURCEDISPLAYTYPE_DOMAIN: // 工作组
nLevel = 1;
strTrueName.LoadString(IDS_WORKGROUP);
strDisplayName.Format( "%s%s", lpnrLocal[i].lpRemoteName, strTrueName );
strTrueName = lpnrLocal[i].lpRemoteName;
break; case RESOURCEDISPLAYTYPE_SERVER: // 计算机
nLevel = 2;
strDisplayName.Format( "%s", lpnrLocal[i].lpRemoteName + 2 );// 加2是为去掉前缀"//"
strTrueName = strDisplayName;
struct hostent *host;
struct in_addr *ptr; // To retrieve the IP Address
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData); host = gethostbyname(strTrueName);
ptr = (struct in_addr *) host->h_addr_list[0]; int a,b,c,d;
CString strTemp;
a= ptr->S_un.S_un_b.s_b1; // Eg. 211.40.35.76 split up like this.
b = ptr->S_un.S_un_b.s_b2; // 40
c = ptr->S_un.S_un_b.s_b3; // 35
d = ptr->S_un.S_un_b.s_b4; // 76
strTemp.Format("%d.%d.%d.%d",a,b,c,d);
strTrueName.Format("%s(%s)",strTrueName,strTemp);
WSACleanup();
break;
//default:
// break;
}
ASSERT( nLevel != -1 ); //调用你的处理函数,我是将其放入列表框中
// InsertItem (nLevel,strTrueName, strDisplayName);
m_List.AddString(strTrueName); if(!EnumerateNetHood(&lpnrLocal[i])) return FALSE;
}
}
}
else
if( dwRetEnum != ERROR_NO_MORE_ITEMS )
return FALSE;
}
while( dwRetEnum != ERROR_NO_MORE_ITEMS );
GlobalFree( (HGLOBAL)lpnrLocal );
dwRet = WNetCloseEnum( hEnum );
if( dwRet != NO_ERROR )
return FALSE;
return TRUE;
}
{ DWORD dwRet, dwRetEnum;
HANDLE hEnum;
DWORD cbBuffer = 16384;
DWORD cEntries = 0xFFFFFFFF;
LPNETRESOURCE lpnrLocal;
DWORD i; CString str;
int nLevel = -1;
CString strDisplayName;
CString strTrueName;
dwRet = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &hEnum );
if(dwRet == WN_FUNCTION_BUSY || dwRet == ERROR_BAD_NET_NAME)
return TRUE; if(dwRet != NO_ERROR) return FALSE;
do
{
lpnrLocal = (LPNETRESOURCE)GlobalAlloc( GPTR, cbBuffer );
dwRetEnum = WNetEnumResource( hEnum, &cEntries, lpnrLocal, &cbBuffer);
if( dwRetEnum == NO_ERROR)
{
str.LoadString(IDS_NETWORK_PROVIDER); for( i = 0; i < cEntries; i++ )
{
// ProcessMessages(); // 只搜索网络提供者为"Microsoft Network"的资源
int nCmpNo = lstrcmpi( (LPCTSTR)lpnrLocal[i].lpProvider, (LPCTSTR)str);
if( nCmpNo ) continue; // 只包括 Containaer 资源, 共享磁盘和打印机不具有 RESOURCEUSAGE_CONTAINER 属性
if( RESOURCEUSAGE_CONTAINER ==(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
{
nLevel = -1;
switch( lpnrLocal[i].dwDisplayType)
{
case RESOURCEDISPLAYTYPE_NETWORK: // 整个网络
nLevel = 0;
strDisplayName.LoadString(IDS_ENTIRNET);
strTrueName = "*";
break; case RESOURCEDISPLAYTYPE_DOMAIN: // 工作组
nLevel = 1;
strTrueName.LoadString(IDS_WORKGROUP);
strDisplayName.Format( "%s%s", lpnrLocal[i].lpRemoteName, strTrueName );
strTrueName = lpnrLocal[i].lpRemoteName;
break; case RESOURCEDISPLAYTYPE_SERVER: // 计算机
nLevel = 2;
strDisplayName.Format( "%s", lpnrLocal[i].lpRemoteName + 2 );// 加2是为去掉前缀"//"
strTrueName = strDisplayName;
struct hostent *host;
struct in_addr *ptr; // To retrieve the IP Address
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData); host = gethostbyname(strTrueName);
ptr = (struct in_addr *) host->h_addr_list[0]; int a,b,c,d;
CString strTemp;
a= ptr->S_un.S_un_b.s_b1; // Eg. 211.40.35.76 split up like this.
b = ptr->S_un.S_un_b.s_b2; // 40
c = ptr->S_un.S_un_b.s_b3; // 35
d = ptr->S_un.S_un_b.s_b4; // 76
strTemp.Format("%d.%d.%d.%d",a,b,c,d);
strTrueName.Format("%s(%s)",strTrueName,strTemp);
WSACleanup();
break;
//default:
// break;
}
ASSERT( nLevel != -1 ); //调用你的处理函数,我是将其放入列表框中
// InsertItem (nLevel,strTrueName, strDisplayName);
m_List.AddString(strTrueName); if(!EnumerateNetHood(&lpnrLocal[i])) return FALSE;
}
}
}
else
if( dwRetEnum != ERROR_NO_MORE_ITEMS )
return FALSE;
}
while( dwRetEnum != ERROR_NO_MORE_ITEMS );
GlobalFree( (HGLOBAL)lpnrLocal );
dwRet = WNetCloseEnum( hEnum );
if( dwRet != NO_ERROR )
return FALSE;
return TRUE;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货