Главная страница
    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.46 MB
Время: 0.069 c
15-1329288950
AV
2012-02-15 10:55
2013.03.22
Записать в файл сразу, аналог flush pascal


6-1261978289
Tornado
2009-12-28 08:31
2013.03.22
Отправка почты через MS Exchange сервер


15-1347000404
ford
2012-09-07 10:46
2013.03.22
алгоритм для анализа изображения


2-1334861238
tester2012
2012-04-19 22:47
2013.03.22
TThread


2-1331922008
PJiur
2012-03-16 22:20
2013.03.22
Что это - Constant expression expected?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский