Форум: "Сети";
Текущий архив: 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.46 MB
Время: 0.09 c