关于枚举局域网内计算机遇到的问题(WNet,附函数)........waiting for your answer!
hfree 2003-10-11 01:08:37 大家看一下下面这一个枚举函数有错吗??
已经连接了ws2_32.lib mpr.lib库了。
void CEnumDialog::StartEnum()
{
CString strTemp ;
struct hostent * pHost ;
struct in_addr * pAddr ;
TRACE("==================Start Enum====================\n") ;
DWORD dwScope = RESOURCE_CONTEXT;//连接状态,Wnetopenenum参数
NETRESOURCE *pNetResource = NULL ;
HANDLE handle ;
WNetOpenEnum(dwScope,NULL,NULL,NULL,&handle) ;
WSADATA wsaData ;
WSAStartup(MAKEWORD(1,1),&wsaData) ;
if(handle)
{
DWORD dwCount = 0xFFFFFFFF ;
LPVOID lpBuffer = new char[2048] ;
DWORD BufferSize = 2048 ;
TRACE("======================Handle=====================\n") ;
WNetEnumResource(handle,&dwCount,lpBuffer,&BufferSize) ;
pNetResource = (NETRESOURCE*)lpBuffer ;
char szHostName[128] ;
for(int i = 0 ;i< BufferSize/sizeof(NETRESOURCE);i++,pNetResource++)
{
TRACE("=====================Cycle====================\n") ;
if(pNetResource->dwUsage == RESOURCEUSAGE_CONTAINER )
//&& pNetResource->dwType == RESOURCETYPE_ANY)
//确保可以pRemoteName可以被WNetOpenEnum获取
{
TRACE("==============Usage and Type================\n") ;
if(pNetResource->lpRemoteName)
//在Trace中lpRemoteName是NULL的,我用的是WinMe,和操作系统版本有关吗?
//还是我这一个函数本身就存在错误
{
TRACE("=========RemoteName========\n") ;
CString strhostname ;
pNetResource->lpRemoteName ;
if( 0 == strhostname.Left(2).Compare("\\\\") ) strhostname = strhostname.Right(strhostname.GetLength() - 2) ;
gethostname(szHostName,strlen(szHostName)) ;
pHost = gethostbyname(strhostname) ;
if(pHost == NULL)
continue ;
pAddr = (struct in_addr*)pHost->h_addr_list[i] ;
int a = pAddr->S_un.S_un_b.s_b1 ;
int b = pAddr->S_un.S_un_b.s_b2 ;
int c = pAddr->S_un.S_un_b.s_b3 ;
int d = pAddr->S_un.S_un_b.s_b4 ;
strTemp.Format("%s---%d.%d.%d.%d",strhostname,a,b,c,d) ;
TRACE("==============%S==============\n",strTemp) ;
m_enumList.AddString(strTemp) ;
}
else
TRACE("===========Remote Name == Null===========\n") ;
}
}
delete lpBuffer ;
WNetCloseEnum(handle) ;
}
WSACleanup() ;
}