Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.122.195] |
|
Сообщ.
#1
,
|
|
|
Вот.
Надо как-то получить ip всех машин в локалке. Может кто-нить знает как это сделать на С++? Заранее благодарен. ОС: WinXP Компилятор: Visual Studio 2005 |
Сообщ.
#3
,
|
|
|
Цитата qwerty @ Надо как-то получить ip всех машин в локалке. Может кто-нить знает как это сделать на С++? Заранее благодарен. Через winsock, или boost. |
Сообщ.
#4
,
|
|
|
void CCompNetDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: Add your control notification handler code here *pResult = 0; } HTREEITEM CCompNetDlg::InsertTreeItem(HTREEITEM hParent, NETRESOURCE *const pNetResource,CString sText, int iImage) { TVINSERTSTRUCT ItemStruct; ItemStruct.hParent = hParent; ItemStruct.hInsertAfter = TVI_LAST; ItemStruct.itemex.mask = TVIF_IMAGE|TVIF_TEXT|TVIF_CHILDREN|TVIF_PARAM; ItemStruct.itemex.pszText = sText.GetBuffer(sText.GetLength()); ItemStruct.itemex.iImage = iImage; ItemStruct.itemex.cChildren = 1; ItemStruct.itemex.lParam = (LPARAM)pNetResource; sText.ReleaseBuffer(); return TreeComp.InsertItem(&ItemStruct); } void CCompNetDlg::OnTvnItemexpandingTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: Add your control notification handler code here CWaitCursor CursorWaiting; ASSERT (pNMTreeView); ASSERT (pResult); if(pNMTreeView->action == 2) { //CString sPath = GetItemPath(pNMTreeView->itemNew.hItem); if(!TreeComp.GetChildItem(pNMTreeView->itemNew.hItem)) { EnumNetwork(pNMTreeView->itemNew.hItem); if(TreeComp.GetSelectedItem() != pNMTreeView->itemNew.hItem) TreeComp.SelectItem(pNMTreeView->itemNew.hItem); } } *pResult = 0; } bool CCompNetDlg::EnumNetwork(HTREEITEM hParent) { bool bGotChildren = false; NETRESOURCE *const pNetResource = (NETRESOURCE*)(TreeComp.GetItemData(hParent)); DWORD dwResult; HANDLE hEnum; DWORD cbBuffer = 16384; DWORD cEntries = 0xFFFFFFFF; DWORD i; LPNETRESOURCE lpnrDrv; dwResult = WNetOpenEnum(pNetResource? RESOURCE_GLOBALNET:RESOURCE_CONTEXT, RESOURCETYPE_ANY, 0, pNetResource?pNetResource:NULL, &hEnum); if(dwResult != NO_ERROR) return false; do { lpnrDrv = (LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer); dwResult = WNetEnumResource(hEnum,&cEntries,lpnrDrv,&cbBuffer); if(dwResult == NO_ERROR) { for(i = 0; i<cEntries;i++) { CString sNameRemote = lpnrDrv[i].lpRemoteName; int nType = 9; if(sNameRemote.IsEmpty()) { sNameRemote = lpnrDrv[i].lpComment; nType = 8; } if(sNameRemote.GetLength()>0&&sNameRemote[0] == _T('\\')) sNameRemote = sNameRemote.Mid(1); if(sNameRemote.GetLength()>0&&sNameRemote[0] == _T('\\')) sNameRemote = sNameRemote.Mid(1); if(lpnrDrv[i].dwDisplayType = RESOURCEDISPLAYTYPE_SHARE) { int nPos = sNameRemote.Find(_T('\\')); if(nPos>=0) sNameRemote = sNameRemote.Mid(nPos+1); InsertTreeItem(hParent,NULL,sNameRemote,DRIVE_NO_ROOT_DIR); } else { NETRESOURCE* pResource = new NETRESOURCE; ASSERT (pResource); *pResource = lpnrDrv[i]; //pResource->lpLocalName = MakeDynamic(pResource->lpLocalName); InsertTreeItem(hParent, pResource,sNameRemote,pResource->dwDisplayType+7); } bGotChildren = true; } } GlobalFree((HGLOBAL)lpnrDrv); if(dwResult!=ERROR_NO_MORE_ITEMS) break; } while (dwResult != ERROR_NO_MORE_ITEMS); WNetCloseEnum(hEnum); return bGotChildren; return 0; } Работает в МФЦнадо добавить галочку сокетс при создании и Tree control на форму. Выводит имена всех компютеров сети. Будут вопросы пиши. |