Программирование на C++ глазами хакера


Структура сети - часть 2


Теперь программа выглядит должным образом и создает корневой элемент, но пока без поиска в сети. Когда программа запущена, и пользователь щелкнет мышкой по элементу дерева, нужно найти все, что есть доступного в сети, относящееся к этому элементу.

Для этого надо написать обработчик события ITEMEXPANDING и в нем производить поиск. Перейдите в редактор ресурсов и выделите компонент Tree Control . В окне Properties щелкните по кнопке Control Events, и вы увидите все события, которые может генерировать выделенный компонент. Щелкните напротив события TVN_ITEMEXPANDING и в выпадающем списке выберите пункт Add, чтобы добавить обработчик события. Код, который должен быть в этом обработчике, приведен в листинге 4.3.

Листинг 4.3. Обработчик события TVN_ITEMEXPANDING
void CNetNeighbourDlg::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(!m_NetTree.GetChildItem(pNMTreeView->itemNew.hItem)) { EnumNetwork(pNMTreeView->itemNew.hItem); if( m_NetTree.GetSelectedItem( ) != pNMTreeView-> itemNew.hItem) m_NetTree.SelectItem(pNMTreeView->itemNew.hItem); } }

*pResult = 0; }

Здесь у элемента, который в данный момент пытаются открыть, проверяется наличие дочерних элементов и организуется их поиск. Для этого вызывается функция EnumNetwork, которую можно увидеть в листинге 4.4.

Листинг 4.4. Функция EnumNetwork для просмотра сети
bool CNetNeighbourDlg::EnumNetwork(HTREEITEM hParent) { bool bGotChildren = false;

NETRESOURCE *const pNetResource = (NETRESOURCE *) (m_NetTree.GetItemData(hParent));

DWORD dwResult; HANDLE hEnum; DWORD cbBuffer = 16384; DWORD cEntries = 0xFFFFFFFF; LPNETRESOURCE lpnrDrv; DWORD i; dwResult = WNetOpenEnum(pNetResource ? RESOURCE_GLOBALNET : RESOURCE_CONTEXT, RESOURCETYPE_ANY, 0, pNetResource ? pNetResource: NULL, &hEnum );




Начало  Назад  Вперед



Книжный магазин