При программировании данной задачи в Windows 98 можно использовать функции Windows Networking (WNet), что мы с Вами и сделаем. Все начинается с функции WNetOpenEnum. Эта функция отрывает указатель, с помощью которого можно изучать сеть. Давайте ее посмотрим.
DWORD WNetOpenEnum ( DWORD dwScope, // определяет возможности перечисления DWORD dwType, // тип ресурса для перечисления DWORD dwUsage, // тип использования для перечисления LPNETRESOURCE lpNetResource, // структура для информации о ресурсу LPHANDLE lphEnum // указатель на перечислитель );
Давайте посмотрим параметры dwScope:
Следующий флаг - это dwType:
Флаг dwUsage используется только при перечислении всех ресурсов:
Если lpNetResource равен нулю, то для перечисления будет начинаться с самого верха сети. В другом случае этот параметр должен быть заполнен. При успешном выполнении функция вернет NO_ERROR.
После использования указатель на перечислитель lphEnum должен быть закрыт с помощью функции:
DWORD WNetCloseEnum ( HANDLE hEnum // указатель на перечислитель );
В случае успеха функция вернет NO_ERROR. Вот пример кода для начала перечисления.
void CEasyEnumNetResourceAbstract::OpenEnum() { dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NULL, &hEnum); if (dwResult != NO_ERROR) throw CString("Error OpenEnum"); GetResource(); dwResult = WNetCloseEnum(hEnum); if (dwResult != NO_ERROR) throw CString("Error OpenEnum"); }
Все, что нужно здесь - это указатель на перечислитель:
class CEasyEnumNetResourceAbstract { ...... DWORD dwResult; // для результата HANDLE hEnum; // указатель на ресурсы LPNETRESOURCE netRc; ...... };
Функция GetResource специально сделана внутри функции OpenEnum для получения функционального замыкания. В этом классе она виртуальная и не имеем кода. В следующем шаге будет проект с полными кодами функций так что не волнуйтесь про реализацию. А сейчас главное это понять принцип. Открыли перечисление здесь нужно указать типы ресурсов и с какого места в сети мы будет их перечислять. Потом что-то перечислили и закрыли.