void CenumhostsDlg::OnBnClickedEnum()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_ENUM)->EnableWindow(false);
CStringArray list;
EnumHosts(list);
CListBox* pList=(CListBox*)GetDlgItem(IDC_LIST);
pList->ResetContent();
pList->AddString("枚举结果如下");
for(int i=0;i<list.GetSize();i++)
pList->AddString(list.GetAt(i));
GetDlgItem(IDC_ENUM)->EnableWindow(true);
}
void CenumhostsDlg::EnumHosts(CStringArray& list)
{
list.RemoveAll();
CString strTemp;
struct hostent *host;
struct in_addr* ptr;
DWORD dwScope=RESOURCE_CONTEXT;
NETRESOURCE *NetResource=NULL;
HANDLE hEnum;
WNetOpenEnum(dwScope,NULL,NULL,NULL,&hEnum);
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
if(hEnum)
{
DWORD Count=0xFFFFFFFF;
DWORD BufferSize=8192;
LPVOID Buffer=new char[8192];
WNetEnumResource(hEnum,&Count,Buffer,&BufferSize);
NetResource=(NETRESOURCE*)Buffer;
char szHostName[200];
for(unsigned int i=0;i<BufferSize/sizeof(NETRESOURCE);i++,NetResource++)
{
if(NetResource->dwUsage==RESOURCEUSAGE_CONTAINER && NetResource->dwType==RESOURCETYPE_ANY)
{
// if(NetResource->lpRemoteName)
// {
CString strFullName=NetResource->lpRemoteName;
if(0==strFullName.Left(2).Compare("////"))
strFullName=strFullName.Right(strFullName.GetLength()-2);
//gethostname(szHostName,strlen(szHostName));
//TRACE("%s/n",szHostName);
host=gethostbyname(strFullName);
if(host==NULL)continue;
ptr=(struct in_addr*)host->h_addr_list[0];
int a=ptr->S_un.S_un_b.s_b1;
int b=ptr->S_un.S_un_b.s_b2;
int c=ptr->S_un.S_un_b.s_b3;
int d=ptr->S_un.S_un_b.s_b4;
strTemp.Format("%s-->%d.%d.%d.%d",strFullName,a,b,c,d);
list.Add(strTemp);
// }
}
}
delete Buffer;
WNetCloseEnum(hEnum);
}
WSACleanup();