Этот код предназначен для поиска всех компьютеров в указанной рабочей группе с помощью функций Windows API WNetOpenEnum и WNetEnumResource. Вот шаг за шагом, что он делает:
Программа определяет массив Computer из 500 строк, каждый из которых может быть длиной до 25 символов, для хранения имен найденных компьютеров.
Процедура FindAllComputers принимает строку Workgroup в качестве входного параметра и инициализирует некоторые переменные:
ComputerCount: целочисленная переменная для отслеживания количества найденных компьютеров.
EnumHandle: handle для процесса перечисления.
WorkgroupRS: структура TNetResource, представляющая запрос рабочей группы.
Процедура настраивает структуру WorkgroupRS с следующими параметрами:
dwScope: установлено в 2, что означает "глобальная сеть" (то есть, всю сеть).
dwType: установлено в 3, что означает "все типы ресурсов".
dwDisplayType: установлено в 1, что означает "показать все ресурсы".
dwUsage: установлено в 2, что означает "все типы использования".
lpRemoteName: указывает на строку Workgroup.
Программа вызывает функцию WNetOpenEnum с параметрами WorkgroupRS и handle перечисления (EnumHandle) в качестве входных параметров. Это запускает процесс перечисления.
Процедура затем вступает в цикл, который повторно вызывает функцию WNetEnumResource с параметрами EnumHandle, буферными параметрами и некоторыми другими:
Entries: установлено в 1, что означает "получить один ресурс".
BufSize: установлено в размере буфера (SizeOf(Buf)).
Функция возвращает код ошибки (Result) и количество элементов в буфере (Entries).
Если результат равен NO_ERROR (0) и в буфере только один элемент, программа:
Увеличивает ComputerCount.
Копирует имя из буфера в соответствующий элемент массива Computer.
Цикл продолжается до тех пор, пока в буфере не будет более одного элемента или не произойдет ошибки.
Наконец, процедура вызывает функцию WNetCloseEnum с параметром EnumHandle для закрытия перечисления.
Чтобы использовать этот код, просто вызовите процедуру FindAllComputers с валидным именем рабочей группы в качестве входного параметра, например:
FindAllComputers('MYWORKGROUP');
Это заполнит массив Computer именами всех компьютеров в указанной рабочей группе.
В статье описывается способ найти все компьютеры в рабочей группе с помощью функции WNetOpenEnum и цикла enumeration, используя язык программирования Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.