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

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

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



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

function EnumerateFunc(hwnd: HWND; hdc: HDC; lpnr: PNetResource): Boolean;
const
  cbBuffer: DWORD = 16384; // 16K is a good size
var
  hEnum, dwResult, dwResultEnum: DWORD;
  lpnrLocal: array
  [0..16384 div SizeOf(TNetResource)] of TNetResource;
    // pointer to enumerated structures
  i: integer;
  cEntries: Longint;
begin
  centries := -1; // enumerate all possible entries

  // Call the WNetOpenEnum function to begin the enumeration.
  dwResult := WNetOpenEnum(
    RESOURCE_CONTEXT, // Enumerate currently connected resources.
    RESOURCETYPE_DISK, // all resources
    0, // enumerate all resources
    lpnr, // NULL first time the function is called
    hEnum // handle to the resource
    );

  if (dwResult <> NO_ERROR) then
  begin
    // Process errors with an application-defined error handler
    Result := False;
    Exit;
  end;

  // Initialize the buffer.
  FillChar(lpnrLocal, cbBuffer, 0);

  // Call the WNetEnumResource function to continue
  //  the enumeration.
  dwResultEnum := WNetEnumResource(hEnum, // resource handle
    DWORD(cEntries), // defined locally as -1
    @lpnrLocal, // LPNETRESOURCE
    cbBuffer); // buffer size

  // This is just printing
  for i := 0 to cEntries - 1 do
  begin
    // loop through each structure and
    // get remote name of resource... lpnrLocal[i].lpRemoteName)
  end;

  // Call WNetCloseEnum to end the enumeration.
  dwResult := WNetCloseEnum(hEnum);

  if (dwResult <> NO_ERROR) then
  begin
    // Process errors... some user defined function here
    Result := False;
  end
  else
    Result := True;
end;

Программный код на Delphi, использующий Windows API для перечисления всех компьютеров (ресурсов типа RESOURCETYPE_ DISK) в сети. Вот разбивка шагов, которые выполняет код:

  1. Процедура EnumerateFunc принимает три параметра:
    • hwnd: handle HWND, который не используется в этом примере.
    • hdc: handle device context, который также не используется.
    • lpnr: указатель на структуру TNetResource, которая будет хранить перечисленные ресурсы.
  2. Процедура инициализирует локальные переменные:
    • cbBuffer: размер буфера в 16 КБ (16384 байта).
    • hEnum: handle ресурсного перечисления.
    • dwResult: DWORD-переменная для хранения результата перечисления.
    • cEntries: целочисленная переменная, которая будет хранить количество перечисленных записей.
  3. Процедура вызывает WNetOpenEnum для начала ресурсного перечисления. Она передает:
    • RESOURCE_CONTEXT как контекст перечисления (enumTypes).
    • RESOURCETYPE_ DISK как тип ресурсов, которые нужно перечислить (все диск-ориентированные ресурсы, включая компьютеры).
    • 0 как зарезервированный параметр.
    • lpnr как NULL-указатель (первый раз, когда функция вызывается).
    • hEnum как handle ресурсного перечисления.
  4. Если перечисление неудачно, процедура возвращает False.
  5. Процедура инициализирует буфер, заполняя его нулями с помощью FillChar.
  6. Она вызывает WNetEnumResource для продолжения перечисления. Функция принимает:
    • hEnum как handle ресурса.
    • cEntries как количество записей (инициализировано в -1, что означает все возможные записи).
    • @lpnrLocal как указатель на буфер.
    • cbBuffer как размер буфера.
  7. Процедура проходит по каждой структуре в буфере и печатает удаленное имя ресурса с помощью lpnrLocal[i].lpRemoteName.
  8. Наконец, она вызывает WNetCloseEnum для завершения перечисления.

Чтобы найти все компьютеры (ресурсы типа RESOURCETYPE_ DISK) в сети, вы можете модифицировать код, итерируя по буферу lpnrLocal и извлекая удаленные имена ресурсов, которые соответствуют типу RESOURCETYPE_ DISK. Вот пример:

for i := 0 to cEntries - 1 do
begin
  if lpnrLocal[i].dwType = RESOURCETYPE_DISK then
  begin
    writeln(lpnrLocal[i].lpRemoteName); // печатает удаленное имя компьютера
  end;
end;

Обратите внимание, что это код assumes that you have the necessary permissions to enumerate resources on the network. Additionally, the WNetOpenEnum and WNetEnumResource functions may return errors or fail if there are issues with the network or the system. You should always handle these cases properly in your application.

В статье описывается функция EnumerateFunc, которая позволяет найти и enumerated all computers on the network using Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-14 23:22:37/0.0062990188598633/0