Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получение MAC адресов сетевых карт в offline [D7, Win2k, WinXP]


Makhanev ©   (2006-01-24 11:33:00) 

Получаю mac при включенной сети - без проблем.
А вот в offline не получается. Например, при использовании функции NetBios в режиме offline она говорит что lana.count=0.

Так есть ли рабочий способ определить свои mac адреса, если сеть отключена?
(cmd->ipconfig/all показывает же....)


qwertyu   (2006-04-28 12:15:00) [1]

Столкнулся с той же проблемой. Если еще нужно нашел здесь код в том числе и для получения mac. С небольшими изменениями:

unit Unit1;

interface

uses
 NB30, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls;

type

TMibIfRow = packed record
   wszName  : array[0..255] of WideChar;
   dwIndex  : DWORD;
   dwType  : DWORD;
   dwMtu  : DWORD;
   dwSpeed  : DWORD;
   dwPhysAddrLen : DWORD;
   bPhysAddr  : array[0..7] of Byte;
   dwAdminStatus : DWORD;
   dwOperStatus : DWORD;
   dwLastChange : DWORD;
   dwInOctets  : DWORD;
   dwInUcastPkts : DWORD;
   dwInNUCastPkts : DWORD;
   dwInDiscards : DWORD;
   dwInErrors  : DWORD;
   dwInUnknownProtos : DWORD;
   dwOutOctets  : DWORD;
   dwOutUCastPkts : DWORD;
   dwOutNUCastPkts : DWORD;
   dwOutDiscards : DWORD;
   dwOutErrors  : DWORD;
   dwOutQLen  : DWORD;
   dwDescrLen  : DWORD;
   bDescr  : array[0..255] of Char;
 end;
 TMibIfArray = array [0..512] of TMibIfRow;
 PMibIfRow = ^TMibIfRow;
 PmibIfArray = ^TmibIfArray;

  TMibIfTable = packed record
  dwNumEntries : DWORD;
  Table     : TMibIfArray;
end;
PMibIfTable = ^ TMibIfTable;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   procedure GetAllMAC(Sender: TObject);
   { Private declarations }
 public
   { Public declarations }
 end;

var
GetIfTable:function( pIfTable: PMibIfTable;
    pdwSize : PULONG;
    bOrder : Boolean ): DWORD; stdcall ;
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GetAllMAC(Sender: TObject);
 // Вспомогательная функция, преобразующая МАС адрес к "нормальному" виду
 //Определяем специальный тип, чтобы можно было передать в функцию массив
 type TMAC = array [0..7] of Byte;
 //В качестве первого значения массив, второе значение, размер данных в массиве
 function GetMAC(Value: TMAC; Length: DWORD): String;
 var
   i: Integer;
 begin
   if Length = 0 then Result := '00-00-00-00-00-00' else
   begin
     Result := '';
     for i:= 0 to Length -2 do
       Result := Result + IntToHex(Value[i],2)+'-';
     Result := Result + IntToHex(Value[Length-1],2);
   end;
 end;

//Сама процедура
var
 FLibHandle  : THandle;
 Table  : TMibIfTable;
 i   : Integer;
 Size    : Integer;
begin
 FLibHandle := LoadLibrary('IPHLPAPI.DLL'); //Загружаем библиотеку
 if FLibHandle = 0 then Exit;
 @GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable');
 if not Assigned(GetIfTable) then
 begin
   FreeLibrary(FLibHandle);
   Close;
 end;

 Size := SizeOf(Table);
 if GetIfTable(@Table, @Size, False ) = 0 then //Выполняем функцию
 begin
   for i:= 0 to Table.dwNumEntries-1 do
   begin
     showmessage('Наименование интерфейса: ' + String(Table.Table[i].bDescr)); //Наименование интерфейса
     showmessage('MAC: ' + GetMAC(TMAC(Table.Table[i].bPhysAddr),Table.Table[i].dwPhysAddrLen)); //MAC
   end;
 end;
 FreeLibrary(FLibHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetAllMAC(Sender);
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо