Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Определение mac-адреса   Найти похожие ветки 

 
BioHEX ©   (2009-12-18 10:24) [0]

Такая беда, при
var
str:TStringList;
begin
str:=TStringList.Create;
str.LoadFromFile("mac.txt");
Memo1.Text:=str.Text;
str.Free;
end;

теряется большая часть информации. Вот код при помощи которого производилась запись mak.txt:
program GetMac;

uses
 Windows,
 SysUtils,
 Classes;

const
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;

type
//------IP address structures---------------------------------------------------
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
IP_ADDRESS_STRING = array[0..15] of char; // IP as string

PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_ADDRESS_STRING;
Context: DWORD;
end;
//------ADAPTER INFO STRUCTURES-------------------------------------------------
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of char;
Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char;
AddressLength: UINT;
Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;
Index: DWORD;
aType: UINT;
DHCPEnabled: UINT;
CurrentIPAddress: PIP_ADDR_STRING;
IPAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DHCPServer: IP_ADDR_STRING;
HaveWINS: BOOL;
PrimaryWINSServer: IP_ADDR_STRING;
SecondaryWINSServer: IP_ADDR_STRING;
LeaseObtained: LongInt;
LeaseExpires: LongInt;
SpareStuff: array [1..200] of char;
end;

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
pOutBufLen: PULONG): DWORD; stdcall;
external "Iphlpapi.dll" name "GetAdaptersInfo";

const
OutBufLen: ULONG = 2000;
AddrLen = 6;

var
AdapterInfo: IP_ADAPTER_INFO;
Result: DWORD;
i: integer;
Next: PIP_ADAPTER_INFO;
str:TStringList;
mac:String;
begin
str:=TStringList.Create;
Result:= GetAdaptersInfo(@AdapterInfo, @OutBufLen);
if Result = 0 then
begin
Next:= @AdapterInfo;
repeat
str.Add("Description: "+Next^.Description);
for i := 0 to AddrLen do
begin
mac:=mac+IntToHex(Next^.Address[i],2);
if i <> AddrLen then mac:=mac+"-";
end;
str.Add("MAC address: "+mac);
Next:= Next^.Next; // переходим к следующему адаптеру
str.Add("");
until Next = nil;
end
else str.Add("Error. Result code: "+IntToStr(Result));

str.SaveToFile("mac.txt");

str.Free;
end.


 
Vitalts   (2009-12-18 10:36) [1]

Дык посмотри что в текстовик пишеться. После МАК-адреса куча нулей идет, str.Text - есть стринг, и данный символ означет конец стринга, вот и режеться.
Делай не for i := 0 to AddrLen do, а до фиксированного значения. МАК состоит из 6-ти байт. И походу нулевой байт тоже нужно упускать, проконсультируйся с мануалом.


 
BioHEX ©   (2009-12-18 10:41) [2]

Ок, спасибо.


 
BioHEX ©   (2009-12-18 10:44) [3]

const
 AddrLen=6


 
BioHEX ©   (2009-12-18 10:46) [4]

значение и так фиксировано.


 
Vitalts   (2009-12-18 10:51) [5]

Соврал я, ошибка в
repeat
str.Add("Description: "+Next^.Description);

На последнем шаге пишеться пустой Next^.Description

Юзай While


 
Vitalts   (2009-12-18 10:57) [6]

Или проверку на Next = nil перед обращением


 
BioHEX ©   (2009-12-18 11:08) [7]

изменил цикл на

while Next<>nil do
begin
end;


не помогает


 
BioHEX ©   (2009-12-18 11:11) [8]

соответственно проверка на Next = nil перед обращением тоже отпадает


 
BioHEX ©   (2009-12-23 16:58) [9]

Вопрос снят. Полностью переписал код.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.158 c
2-1334296563
leklerk
2012-04-13 09:56
2013.03.22
Создание формы из консоли


15-1330181581
Pcrepair
2012-02-25 18:53
2013.03.22
TWebBrowser портит ссылки в коде страницы


15-1340310602
Юрий
2012-06-22 00:30
2013.03.22
С днем рождения ! 22 июня 2012 пятница


15-1351606208
Дмитрий С
2012-10-30 18:10
2013.03.22
Как в var параметр передать nil?


2-1338983806
iMain
2012-06-06 15:56
2013.03.22
Client WebService