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

Как найти все комьютеры в сети 2

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



Автор: Pegas
WEB-сайт: http://forum.vingrad.ru

function TNetForm.FillNetLevel(xxx: PNetResource; List: TListItems): Word;
type
  PNRArr = ^TNRArr;
  TNRArr = array[0..59] of TNetResource;
var
  x: PNRArr;
  tnr: TNetResource;
  I: integer;
  EntrReq,
    SizeReq,
    twx: THandle;
  WSName: string;
  LI: TListItem;
begin
  Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
    RESOURCEUSAGE_CONTAINER, xxx, twx);
  if Result = ERROR_NO_NETWORK then
    Exit;
  if Result = NO_ERROR then
  begin
    New(x);
    EntrReq := 1;
    SizeReq := SizeOf(TNetResource) * 59;
    while (twx <> 0) and
      (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
    begin
      for i := 0 to EntrReq - 1 do
      begin
        Move(x^[i], tnr, SizeOf(tnr));
        case tnr.dwDisplayType of
          RESOURCEDISPLAYTYPE_SERVER:
            begin
              if tnr.lpRemoteName <> '' then
                WSName := tnr.lpRemoteName
              else
                WSName := tnr.lpComment;
              LI := list.Add;
              LI.Caption := copy(WSName, 3, length(WSName) - 2);
              //list.Add(WSName);
            end;
        else
          FillNetLevel(@tnr, list);
        end;
      end;
    end;
    Dispose(x);
    WNetCloseEnum(twx);
  end;
end;

Пример вызова:

FillNetLevel(nil, ListView1.Items);    

Перевод контента на русский язык:

Функция Delphi, именуемая FillNetLevel, пополняет список ресурсов сети с локального компьютера и смежных сетей. Она использует Windows API для перечисления ресурсов сети и отображает их имена в списке.

Вот шаг за шагом, что код делает:

  1. Функция принимает два параметра: xxx (указатель на структуру PNetResource) и List (объект TListItems).
  2. Она инициализирует несколько переменных: x (указатель на массив структур TNetResource), tnr (структура TNetResource), I (целое число), EntrReq (handle), SizeReq (размер структуры TNetResource) и WSName (строка).
  3. Она вызывает функцию Windows API WNetOpenEnum, чтобы открыть handle для перечисления ресурсов сети, передавая в нее тип ресурса (RESOURCE_GLOBALNET), тип ресурса (RESOURCETYPE_ANY) и другие параметры.
  4. Если результат равен ERROR_NO_NETWORK, функция выходит из себя.
  5. Если результат равен NO_ERROR, она выделяет память для массива структур TNetResource, инициализирует EntrReq в 1 и устанавливает SizeReq в размер одиночной структуры TNetResource, умноженный на 59 (число элементов в массиве).
  6. Она вступает в цикл, который продолжается до тех пор, пока не будут перечислены все ресурсы сети.
  7. Внутри цикла она вызывает функцию WNetEnumResource, чтобы получить следующий набор ресурсов сети, передавая handle для перечисления, количество элементов (EntrReq) и массив структур TNetResource.
  8. Для каждого ресурса она создает новый объект TListItem и устанавливает его заголовок в имя отображения ресурса (либо удаленное имя, либо комментарий).
  9. Если ресурс является сервером, она добавляет имя отображения в список. В противном случае она рекурсивно вызывает функцию, чтобы заполнить любые подпапки.
  10. Наконец, она освобождает память, выделенную для массива, и закрывает handle для перечисления.

Пример использования кода на конце показывает, как вызвать эту функцию с nil в качестве первого параметра (чтобы перечислить все ресурсы сети) и контролем списка (ListView1) в качестве второго параметра.

Обратите внимание, что это код является специфичным для Windows и может не работать на других платформах.

В статье описывается функция TNetForm.FillNetWork, которая позволяет найти все компьютеры в сети и добавить их в список элементов.


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

Получайте свежие новости и обновления по 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 16:44:16/0.0033068656921387/0