Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Определение 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.064 c
3-1278782038
TechnoDreamer
2010-07-10 21:13
2013.03.22
DBX Error: Unsupported field type


2-1347011404
alexdn
2012-09-07 13:50
2013.03.22
Текст на картинку (канву)


15-1350390543
AV
2012-10-16 16:29
2013.03.22
Узнать свой пароль в текущей сессии oracle


15-1331654585
Unknown user
2012-03-13 20:03
2013.03.22
Альтернатива GetTickCount


2-1339183336
простофан
2012-06-08 23:22
2013.03.22
rewrite





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский