//Start to Enum all PC which belongs to the current group WNetOpenEnum (RESOURCE_CONTEXT,RESOURCETYPE_ANY,NULL, lpNet,&hEnum); cEntries=0xffffffff; lpNet->lpRemoteName =tvSelItem.pszText; WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum); dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer); ///Start To InsertItem into TreeView and ListView CString strPC1; m_clcListCtrl .DeleteAllItems (); for (int istart=0;istart<(int)cEntries;istart++) { strPC1.Format ("%s",lpNet[istart].lpRemoteName ); strPC1=strPC1.Right (strPC1.GetLength () - 2); ///Set ListView Item m_clcListCtrl .InsertItem(istart,strPC1,1); m_clcListCtrl .SetItemText (istart,1,lpNet[istart].lpComment ); ///Get the PC IP Address HOSTENT * host1=gethostbyname (strPC1);
如果是这样的话 那也不可能有h这类人了
// LanManage.cpp : implementation file
//#include "stdafx.h"
#include "NetSniff.h"
#include "LanManage.h"
#include "LanManAbout.h"
//////
#include <windows.h>
#include <winbase.h>
#include <winnetwk.h>
#include <winsock2.h>#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CLanManage dialog
CLanManage::CLanManage(CWnd* pParent /*=NULL*/)
: CDialog(CLanManage::IDD, pParent)
{
//{{AFX_DATA_INIT(CLanManage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CLanManage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLanManage)
DDX_Control(pDX, IDC_LANMANAGE_LIST, m_clcListCtrl);
DDX_Control(pDX, IDC_LANMANAGE_NETWORK, m_ctcNetwork);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLanManage, CDialog)
//{{AFX_MSG_MAP(CLanManage)
ON_NOTIFY(NM_DBLCLK, IDC_LANMANAGE_NETWORK, OnDblclkLanmanageNetwork)
ON_WM_SYSCOMMAND()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CLanManage message handlersBOOL CLanManage::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetClassLong(this->m_hWnd,GCL_HICON,(LONG)AfxGetApp()->LoadIcon(IDI_MAINICON));
//Add About Menu
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
CString strAboutMenu;
strAboutMenu.LoadString(IDS_LANMANAGE_ABOUT);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
CBitmap * pMenuBM=new CBitmap;
pMenuBM->LoadBitmap(IDB_WBFSOFT);
pSysMenu->SetMenuItemBitmaps(8,MF_BYPOSITION,pMenuBM,NULL);
}
//insert splitbar
CRect crect(0,0,0,0);
m_vsplitbar .Create(WS_CHILD|WS_BORDER|WS_DLGFRAME|WS_VISIBLE,crect,this,998);
m_vsplitbar .SetPanes(&m_ctcNetwork ,&m_clcListCtrl );
//Set TreeView ImageList
HINSTANCE hinst=AfxGetApp()->m_hInstance ;
LPCTSTR lpIcon="Shell32.dll";
m_ilImageList.Create (16,16,ILC_COLOR|ILC_MASK,0,0); m_ilImageList.Add (ExtractIcon(hinst,lpIcon,13)); //0 All Lan
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,15)); //1 User PC
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,16)); //2 Printer
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,17)); //3 Network Nei
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,18)); //4 Domain Icon
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,28)); //5 Share
m_ilImageList.Add (ExtractIcon(hinst,lpIcon,3)); //6 Folder m_ctcNetwork.SetImageList (&m_ilImageList,TVSIL_NORMAL);
m_clcListCtrl .SetImageList (&m_ilImageList,TVSIL_NORMAL); m_ctcNetwork .SetTextColor (RGB(0,0,255));
///Insert Item
HTREEITEM htiCurr;
HTREEITEM htiParent=m_ctcNetwork.InsertItem ("网络邻居",3,3);
//Insert domain Information
DWORD dwRetEnum;
DWORD cEntries=0xffffffff;
DWORD cbBuffer;
LPNETRESOURCE lpnrLocal=new _NETRESOURCEA[1024];
HANDLE hEnum; cbBuffer=1024*sizeof(_NETRESOURCEA); WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NULL,&hEnum);
lpnrLocal=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
dwRetEnum=WNetEnumResource (hEnum,&cEntries,lpnrLocal,&cbBuffer); if (lpnrLocal->dwUsage ==RESOURCEUSAGE_CONTAINER)
{
WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,
lpnrLocal,&hEnum);
cEntries =0xffffffff;
dwRetEnum=WNetEnumResource (hEnum,&cEntries,lpnrLocal,&cbBuffer);
for (int i=0;i<(int)cEntries;i++)
{
htiCurr=m_ctcNetwork .InsertItem (lpnrLocal[i].lpRemoteName ,4,4,htiParent );
m_ctcNetwork .SetItemData (htiCurr,0);
}
}
///Set Root Mark that its children have been generated
m_ctcNetwork.SetItemData (htiParent,1); //Initial ListCtrl
RECT rect;
int nWidth;
m_clcListCtrl .GetClientRect (&rect);
nWidth=(rect.right - rect.left)/3 ; m_clcListCtrl .SetTextColor (RGB(0,0,255));
m_clcListCtrl .InsertColumn (0,"计算机名",LVCFMT_LEFT,nWidth);
m_clcListCtrl .InsertColumn (1,"描述",LVCFMT_LEFT,nWidth);
m_clcListCtrl .InsertColumn (2,"IP地址",LVCFMT_LEFT,nWidth); return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void CLanManage::OnDblclkLanmanageNetwork(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwRet;
DWORD cEntries=0xffffffff;
DWORD cbBuffer;
HANDLE hEnum;
LPNETRESOURCE lpNet=new _NETRESOURCEA[1024];
cbBuffer=1024*sizeof(_NETRESOURCEA);
////Treeview item
TVITEM tvSelItem;
int nIndex=0;
POINT ptCurr;
//Initial Winsock
WORD dwVersion=MAKEWORD(2,2);
WSADATA wsaDat;
BOOL bMark=FALSE;
int nRet=WSAStartup (dwVersion,&wsaDat);
if (nRet==0) bMark=TRUE; HTREEITEM htiSel=m_ctcNetwork .GetSelectedItem ();
DWORD dwMark=m_ctcNetwork .GetItemData(htiSel); tvSelItem.hItem=htiSel;
tvSelItem.cchTextMax=32;
tvSelItem.pszText=new char[32];
tvSelItem.lParam=NULL;
tvSelItem.mask=TVIF_HANDLE |TVIF_IMAGE |TVIF_SELECTEDIMAGE |TVIF_TEXT ;
m_ctcNetwork .GetItem (&tvSelItem); if ((dwMark==1)&&(tvSelItem.iImage==4)&&bMark)
{
///Set ListView Item
if (!bMark)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
///
lpNet->dwDisplayType =RESOURCEDISPLAYTYPE_SERVER;
lpNet->dwScope =RESOURCE_GLOBALNET;
lpNet->dwType =RESOURCETYPE_ANY;
lpNet->dwUsage =RESOURCEUSAGE_CONTAINER;
//lstrcpy(lpNet->lpRemoteName ,strText);
lpNet->lpRemoteName =tvSelItem.pszText;
lpNet=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE,
lpNet,&hEnum);
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);
//Start to Enum all PC which belongs to the current group
WNetOpenEnum (RESOURCE_CONTEXT,RESOURCETYPE_ANY,NULL,
lpNet,&hEnum);
cEntries=0xffffffff;
lpNet->lpRemoteName =tvSelItem.pszText;
WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum);
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer); ///Start To InsertItem into TreeView and ListView
CString strPC1; m_clcListCtrl .DeleteAllItems (); for (int istart=0;istart<(int)cEntries;istart++)
{
strPC1.Format ("%s",lpNet[istart].lpRemoteName );
strPC1=strPC1.Right (strPC1.GetLength () - 2);
///Set ListView Item
m_clcListCtrl .InsertItem(istart,strPC1,1);
m_clcListCtrl .SetItemText (istart,1,lpNet[istart].lpComment );
///Get the PC IP Address
HOSTENT * host1=gethostbyname (strPC1);
{
in_addr addr1;
CopyMemory(&addr1.S_un .S_addr ,host1->h_addr_list [0],host1->h_length );
LPTSTR lpIPAddr1=inet_ntoa(addr1);
m_clcListCtrl .SetItemText (istart,2,lpIPAddr1 );
}
else
{
m_clcListCtrl .SetItemText (istart,2,"Unresolved!");
} m_clcListCtrl .GetItemPosition (istart,&ptCurr);
m_clcListCtrl .Update(istart);
m_clcListCtrl .Scroll(CSize(ptCurr));
}
WSACleanup();
GlobalFree(lpNet);
return;
} if (dwMark==1)
{
WSACleanup();
return;
}
///Set Current TreeNode Children Information
//If it is domain selected
if (tvSelItem.iImage==4)
{
lpNet->dwDisplayType =RESOURCEDISPLAYTYPE_SERVER;
lpNet->dwScope =RESOURCE_GLOBALNET;
lpNet->dwType =RESOURCETYPE_ANY;
lpNet->dwUsage =RESOURCEUSAGE_CONTAINER;
//lstrcpy(lpNet->lpRemoteName ,strText);
lpNet->lpRemoteName =tvSelItem.pszText;
lpNet=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE,
lpNet,&hEnum);
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);
//Start to Enum all PC which belongs to the current group
WNetOpenEnum (RESOURCE_CONTEXT,RESOURCETYPE_ANY,NULL,
lpNet,&hEnum);
cEntries=0xffffffff;
lpNet->lpRemoteName =tvSelItem.pszText;
WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum);
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer); ///Start To InsertItem into TreeView and ListView
CString strPC; m_clcListCtrl .DeleteAllItems (); for (int i=0;i<(int)cEntries;i++)
{
strPC.Format ("%s",lpNet[i].lpRemoteName );
strPC=strPC.Right (strPC.GetLength () - 2);
HTREEITEM htiCurr=m_ctcNetwork .InsertItem(strPC ,1,1,htiSel);
///Set ListView Item
if (!bMark) continue;
m_clcListCtrl .InsertItem(i,strPC,1);
m_clcListCtrl .SetItemText (i,1,lpNet[i].lpComment );
///Get the PC IP Address
HOSTENT * host=gethostbyname (strPC);
if (host!=NULL)
{
in_addr addr;
CopyMemory(&addr.S_un .S_addr ,host->h_addr_list [0],host->h_length );
LPTSTR lpIPAddr=inet_ntoa(addr);
m_clcListCtrl .SetItemText (i,2,lpIPAddr );
}
else
{
m_clcListCtrl .SetItemText (i,2,"Unresolved!");
}
//
m_clcListCtrl .GetItemPosition (i,&ptCurr);
m_clcListCtrl .Update(i);
m_clcListCtrl .Scroll(CSize(ptCurr));
}
m_ctcNetwork .SetItemData (htiSel,1);
}
else if (tvSelItem.iImage==1)
{
lpNet=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
lpNet->dwDisplayType =RESOURCEDISPLAYTYPE_SHARE;
lpNet->dwScope =RESOURCE_GLOBALNET;
lpNet->dwType =RESOURCETYPE_ANY;
lpNet->dwUsage =RESOURCEUSAGE_CONTAINER;
lpNet->lpRemoteName =new char[32];
//lstrcpy(lpNet->lpRemoteName ,strText);
wsprintf (lpNet->lpRemoteName ,"%s%s","\\\\",tvSelItem.pszText);
//lpNet=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
dwRet=WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,
lpNet,&hEnum);
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);
/*
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
WNetCloseEnum(hEnum);
////
//Start to Enum all PC which belongs to the current group
HTREEITEM htiParent=m_ctcNetwork .GetParentItem(htiSel);
TVITEMA tvi;
tvi.hItem =htiParent;
tvi.mask =TVIF_CHILDREN |TVIF_HANDLE |TVIF_IMAGE |TVIF_SELECTEDIMAGE |TVIF_TEXT ;
m_ctcNetwork .GetItem (&tvi); lpNet->lpRemoteName =tvi.pszText ;
dwRet=WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum);
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
cEntries=0xffffffff;
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
WNetCloseEnum(hEnum);
wsprintf (lpNet->lpRemoteName ,"%s%s","\\\\",tvSelItem.pszText); dwRet=WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum);
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
cEntries=0xffffffff;
dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);
if (dwRet!=NO_ERROR)
{
WSACleanup();
GlobalFree(lpNet);
return;
}
WNetCloseEnum(hEnum);*/
for (int j=0;j<(int)cEntries;j++)
{
if (lpNet[j].dwType ==RESOURCETYPE_DISK)
{
m_ctcNetwork .InsertItem(lpNet[j].lpRemoteName ,6,6,htiSel );
}
else if (lpNet[j].dwType ==RESOURCETYPE_PRINT)
{
m_ctcNetwork .InsertItem(lpNet[j].lpRemoteName ,2,2,htiSel );
}
else
{
m_ctcNetwork .InsertItem(lpNet[j].lpRemoteName ,5,5,htiSel );
}
}
m_ctcNetwork .SetItemData (htiSel,1);
}
WSACleanup();
GlobalFree(lpNet);
*pResult = 0;
}////System Command
void CLanManage::OnSysCommand (UINT nID,LPARAM lParam)
{
if ((nID&0xFFF0)==IDM_ABOUTBOX)
{
CLanManAbout paboutdlg; //=new CLanManAbout();
// if (paboutdlg ->GetSafeHwnd ()==0)
if (paboutdlg.DoModal()==IDOK)
{
// SetClassLong(paboutdlg->m_hWnd,GCL_HICON,IDI_MAINICON);
// paboutdlg->Create (IDD_LANMAN_ABOUT);
// paboutdlg->ShowWindow (SW_SHOW);
EndDialog(0);
return;
}
}
else
{
CDialog::OnSysCommand (nID,lParam);
}
}int CLanManage::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
/* No FrameWnd can not dock toolbar
if (!m_tbToolbar.CreateEx (this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|
CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_tbToolbar.LoadToolBar (IDR_MAINFRAME)
{
return -1
}
m_tbToolbar.EnableDocking (CBRS_ALIGN_ANY);
*/
return 0;
}
不过还是很感谢你!
等我的c++学好了以后再研究这段代码,现在先收藏!