Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как найти все компьютеры в рабочей группе

Delphi , Интернет и Сети , Сеть

Как найти все компьютеры в рабочей группе

Я пришел к тебе с дискетой - рассказать, что сеть упала.


var
  Computer: array [1..500] of string[25];
  ComputerCount: Integer;

procedure FindAllComputers(Workgroup: string);
var
  EnumHandle: THandle;
  WorkgroupRS: TNetResource;
  Buf: array [1..500] of TNetResource;
  BufSize: Integer;
  Entries: Integer;
  Result: Integer;
begin
  ComputerCount := 0;
  Workgroup := Workgroup + #0;
  FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
  with WorkgroupRS do
  begin
    dwScope := 2;
    dwType := 3;
    dwDisplayType := 1;
    dwUsage := 2;
    lpRemoteName := @Workgroup[1];
  end;

  WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle);

  repeat
    Entries := 1;
    BufSize := SizeOf(Buf);

    Result := WNetEnumResource(EnumHandle, Entries, @Buf, BufSize);
    if (Result = NO_ERROR) and (Entries = 1) then
    begin
      Inc( ComputerCount );
      Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);
    end;
  until
    (Entries <> 1) or (Result <> NO_ERROR);

  WNetCloseEnum( EnumHandle );
end;

Классический программный код на Delphi!

Этот код предназначен для поиска всех компьютеров в указанной рабочей группе с помощью функций Windows API WNetOpenEnum и WNetEnumResource. Вот шаг за шагом, что он делает:

  1. Программа определяет массив Computer из 500 строк, каждый из которых может быть длиной до 25 символов, для хранения имен найденных компьютеров.

  2. Процедура FindAllComputers принимает строку Workgroup в качестве входного параметра и инициализирует некоторые переменные:

    • ComputerCount: целочисленная переменная для отслеживания количества найденных компьютеров.
    • EnumHandle: handle для процесса перечисления.
    • WorkgroupRS: структура TNetResource, представляющая запрос рабочей группы.
  3. Процедура настраивает структуру WorkgroupRS с следующими параметрами:

    • dwScope: установлено в 2, что означает "глобальная сеть" (то есть, всю сеть).
    • dwType: установлено в 3, что означает "все типы ресурсов".
    • dwDisplayType: установлено в 1, что означает "показать все ресурсы".
    • dwUsage: установлено в 2, что означает "все типы использования".
    • lpRemoteName: указывает на строку Workgroup.
  4. Программа вызывает функцию WNetOpenEnum с параметрами WorkgroupRS и handle перечисления (EnumHandle) в качестве входных параметров. Это запускает процесс перечисления.

  5. Процедура затем вступает в цикл, который повторно вызывает функцию WNetEnumResource с параметрами EnumHandle, буферными параметрами и некоторыми другими:

    • Entries: установлено в 1, что означает "получить один ресурс".
    • BufSize: установлено в размере буфера (SizeOf(Buf)).
    • Функция возвращает код ошибки (Result) и количество элементов в буфере (Entries).
  6. Если результат равен NO_ERROR (0) и в буфере только один элемент, программа:

    • Увеличивает ComputerCount.
    • Копирует имя из буфера в соответствующий элемент массива Computer.
  7. Цикл продолжается до тех пор, пока в буфере не будет более одного элемента или не произойдет ошибки.

  8. Наконец, процедура вызывает функцию WNetCloseEnum с параметром EnumHandle для закрытия перечисления.

Чтобы использовать этот код, просто вызовите процедуру FindAllComputers с валидным именем рабочей группы в качестве входного параметра, например:

FindAllComputers('MYWORKGROUP');

Это заполнит массив Computer именами всех компьютеров в указанной рабочей группе.

В статье описывается способ найти все компьютеры в рабочей группе с помощью функции WNetOpenEnum и цикла enumeration, используя язык программирования Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сеть ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:15:59/0.0033419132232666/0