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

Как получить MAC-адрес в Windows 7/10/11 простым и быстрым способом

Delphi , Синтаксис , Ошибки и Исключения

В этом руководстве мы рассмотрим несколько способов получения MAC-адреса в Windows 7/10/11 с помощью объектно-ориентированного языка программирования Pascal (Delphi).

1. Использование командной строки с помощью пакета WinAPI

Одним из простых способов получения MAC-адреса в Windows является использование командной строки с помощью пакета WinAPI. Для этого вам нужно будет запустить команду "getmac" и извлечь MAC-адрес из результатов. Вот пример кода на Object Pascal (Delphi), который демонстрирует этот подход:

program GetMACAddress;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Process;

function GetMACAddress: string;
var
  AProcess: TProcess;
  AStringList: TStringList;
  I: Integer;
  OutputLine: string;
begin
  Result := '';
  AProcess := TProcess.Create(nil);
  AStringList := TStringList.Create;
  try
    AProcess.Executable := 'getmac';
    AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes, poNoConsole];
    AProcess.Execute;
    AStringList.LoadFromStream(AProcess.Output);
    for I := 0 to AStringList.Count - 1 do
    begin
      OutputLine := AStringList[I];
      if Pos('-', OutputLine) > 0 then
      begin
        Result := Trim(Copy(OutputLine, 1, Pos(' ', OutputLine) - 1));
        Break;
      end;
    end;
  finally
    AProcess.Free;
    AStringList.Free;
  end;
end;

begin
  Writeln('MAC Address: ', GetMACAddress);
  Readln;
end.

Этот код создает новый процесс для запуска команды "getmac" и извлекает MAC-адрес из результатов. Однако этот подход может быть медленным из-за необходимости запускать процесс и обрабатывать его вывод.

2. Использование API GetAdaptersAddresses

Более быстрым и надежным способом получения MAC-адреса в Windows является использование функции GetAdaptersAddresses из библиотеки WinAPI. Эта функция возвращает список сетевых адаптеров и их соответствующие MAC-адреса. Вот пример кода на Object Pascal (Delphi), который демонстрирует этот подход:

program GetMACAddressUsingGetAdaptersAddresses;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Math,
  JwaWinError,
  JwaIpTypes,
  JwaIpHlpApi;

function GetMACAddress: string;
var
  PA, Buffer: PIP_ADAPTER_ADDRESSES;
  BufLen: LongWord;
  Result: LongWord;
  B: Byte;
  MAC: string;
begin
  BufLen := 0;
  Result := GetAdaptersAddresses(AF_UNSPEC, 0, nil, nil, @BufLen);
  if Result <> ERROR_BUFFER_OVERFLOW then
    RaiseLastOSError(Result);
  GetMem(Buffer, BufLen);
  try
    Result := GetAdaptersAddresses(AF_UNSPEC, 0, nil, Buffer, @BufLen);
    if Result <> ERROR_SUCCESS then
      RaiseLastOSError(Result);
    PA := Buffer;
    repeat
      if PA^.PhysicalAddressLength = 0 then
        MAC := 'do not have a data-link layer'
      else
      begin
        MAC := '';
        for B in PA^.PhysicalAddress do
        begin
          if MAC <> '' then
            MAC := MAC + ':';
          MAC := MAC + IntToHex(B, 2);
        end;
      end;
      Writeln(MAC, ' ', PA^.Description, ' ', PA^.FriendlyName);
      PA := PA^.Next;
    until PA = nil;
  finally
    FreeMem(Buffer);
  end;
end;

begin
  GetMACAddress;
  Readln;
end.

Этот код использует функцию GetAdaptersAddresses для получения списка сетевых адаптеров и их соответствующих MAC-адресов. Он извлекает MAC-адреса и выводит их на консоль вместе с описанием и дружественным именем каждого адаптера.

3. Использование пакета WinUnit.Jedi

WinUnit.Jedi — это набор компонентов для работы с Windows, включая компоненты для работы с сетью. Один из компонентов этого пакета — JwaIpHlpApi, который предоставляет доступ к функции GetAdaptersAddresses. Вот пример кода на Object Pascal (Delphi), который демонстрирует этот подход:

program GetMACAddressUsingWinUnitJedi;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  JwaIpTypes,
  JwaIpHlpApi;

function GetMACAddress: string;
var
  PA, Buffer: PIP_ADAPTER_ADDRESSES;
  BufLen: LongWord;
  Result: LongWord;
  B: Byte;
  MAC: string;
begin
  BufLen := 0;
  Result := GetAdaptersAddresses(AF_UNSPEC, 0, nil, nil, @BufLen);
  if Result <> ERROR_BUFFER_OVERFLOW then
    RaiseLastOSError(Result);
  GetMem(Buffer, BufLen);
  try
    Result := GetAdaptersAddresses(AF_UNSPEC, 0, nil, Buffer, @BufLen);
    if Result <> ERROR_SUCCESS then
      RaiseLastOSError(Result);
    PA := Buffer;
    repeat
      if PA^.PhysicalAddressLength = 0 then
        MAC := 'do not have a data-link layer'
      else
      begin
        MAC := '';
        for B in PA^.PhysicalAddress do
        begin
          if MAC <> '' then
            MAC := MAC + ':';
          MAC := MAC + IntToHex(B, 2);
        end;
      end;
      Writeln(MAC, ' ', PA^.Description, ' ', PA^.FriendlyName);
      PA := PA^.Next;
    until PA = nil;
  finally
    FreeMem(Buffer);
  end;
end;

begin
  GetMACAddress;
  Readln;
end.

Этот код аналогичен предыдущему примеру, но использует компоненты пакета WinUnit.Jedi для доступа к функции GetAdaptersAddresses.

Заключение

В этом руководстве мы рассмотрели несколько способов получения MAC-адреса в Windows 7/10/11 с помощью Object Pascal (Delphi). Первый подход использует командную строку и может быть медленным из-за необходимости запускать процесс и обрабатывать его вывод. Второй и третий подходы используют функцию GetAdaptersAddresses из библиотеки WinAPI и предоставляют быстрый и надежный способ получения MAC-адреса. Вы можете выбрать любой из этих подходов в зависимости от ваших конкретных требований и предпочтений.

Надеюсь, эта статья поможет вам получить MAC-адрес в Windows 7/10/11 с помощью Object Pascal (Delphi). Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.

Создано по материалам из источника по ссылке.

В этом руководстве представлены несколько способов получения MAC-адреса в Windows 7/10/11 с помощью Object Pascal (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 04:32:41/0.0059530735015869/0