123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- unit uGetMacAddr;
- interface
- uses
- Windows,SysUtils, Classes;
- function GetMacAddress: TStringList;
- implementation
- Const
- MAX_HOSTNAME_LEN = 128; { from IPTYPES.H }
- MAX_DOMAIN_NAME_LEN = 128;
- MAX_SCOPE_ID_LEN = 256;
- MAX_ADAPTER_NAME_LENGTH = 256;
- MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
- MAX_ADAPTER_ADDRESS_LENGTH = 8;
- Type
- TIPAddressString = Array[0..4*4-1] of AnsiChar;
- PIPAddrString = ^TIPAddrString;
- TIPAddrString = Record
- Next : PIPAddrString;
- IPAddress : TIPAddressString;
- IPMask : TIPAddressString;
- Context : Integer;
- End;
- PFixedInfo = ^TFixedInfo;
- TFixedInfo = Record { FIXED_INFO }
- HostName : Array[0..MAX_HOSTNAME_LEN+3] of AnsiChar;
- DomainName : Array[0..MAX_DOMAIN_NAME_LEN+3] of AnsiChar;
- CurrentDNSServer : PIPAddrString;
- DNSServerList : TIPAddrString;
- NodeType : Integer;
- ScopeId : Array[0..MAX_SCOPE_ID_LEN+3] of AnsiChar;
- EnableRouting : Integer;
- EnableProxy : Integer;
- EnableDNS : Integer;
- End;
- PIPAdapterInfo = ^TIPAdapterInfo;
- TIPAdapterInfo = Record { IP_ADAPTER_INFO }
- Next : PIPAdapterInfo;
- ComboIndex : Integer;
- AdapterName : Array[0..MAX_ADAPTER_NAME_LENGTH+3] of AnsiChar;
- Description : Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3] of AnsiChar;
- AddressLength : Integer;
- Address : Array[1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte;
- Index : Integer;
- _Type : Integer;
- DHCPEnabled : Integer;
- CurrentIPAddress : PIPAddrString;
- IPAddressList : TIPAddrString;
- GatewayList : TIPAddrString;
- DHCPServer : TIPAddrString;
- HaveWINS : Bool;
- PrimaryWINSServer : TIPAddrString;
- SecondaryWINSServer : TIPAddrString;
- LeaseObtained : Integer;
- LeaseExpires : Integer;
- End;
- //Function GetNetworkParams(FI : PFixedInfo; Var BufLen : Integer) : Integer;
- // StdCall; External 'iphlpapi.dll' Name 'GetNetworkParams';
- Function GetAdaptersInfo(AI : PIPAdapterInfo; Var BufLen : Integer) : Integer;
- StdCall; External 'iphlpapi.dll' Name 'GetAdaptersInfo';
- function GetMacAddress: TStringList;
- Var
- AI,Work : PIPAdapterInfo;
- Size : Integer;
- Res : Integer;
- // I : Integer;
- Function MACToStr(ByteArr : PByte; Len : Integer) : String;
- Begin
- Result := '';
- While (Len > 0) do Begin
- Result := Result+IntToHex(ByteArr^, 2);
- ByteArr := Pointer(Integer(ByteArr) + SizeOf(Byte));
- Dec(Len);
- End;
- SetLength(Result, Length(Result));
- End;
- Function GetAddrString(Addr : PIPAddrString) : String;
- Begin
- Result := '';
- While (Addr <> nil) do Begin
- Result := Result+'A: '+Addr^.IPAddress+' M: '+Addr^.IPMask+#13;
- Addr := Addr^.Next;
- End;
- End;
- Function TimeTToDateTimeStr(TimeT : Integer) : String;
- Const UnixDateDelta = 25569; { days between 12/31/1899 and 1/1/1970 }
- Var
- DT : TDateTime;
- TZ : TTimeZoneInformation;
- Res : DWord;
- Begin
- If (TimeT = 0) Then Result := ''
- Else Begin
- { Unix TIME_T is secs since 1/1/1970 }
- DT := UnixDateDelta+(TimeT / (24*60*60)); { in UTC }
- { calculate bias }
- Res := GetTimeZoneInformation(TZ);
- If (Res = TIME_ZONE_ID_INVALID) Then RaiseLastWin32Error;
- If (Res = TIME_ZONE_ID_STANDARD) Then Begin
- DT := DT-((TZ.Bias+TZ.StandardBias) / (24*60));
- Result := DateTimeToStr(DT)+' '+WideCharToString(TZ.StandardName);
- End
- Else Begin { daylight saving time }
- DT := DT-((TZ.Bias+TZ.DaylightBias) / (24*60));
- Result := DateTimeToStr(DT)+' '+WideCharToString(TZ.DaylightName);
- End;
- End;
- End;
- begin
- Size := 5120;
- GetMem(AI, Size);
- Res := GetAdaptersInfo(AI, Size);
- If (Res <> ERROR_SUCCESS) Then Begin
- SetLastError(Res);
- RaiseLastWin32Error;
- End;
- Work := AI;
- //I := 1;
- Result := TStringList.Create;
- Repeat
- //Add('');
- //Add('Adapter '+IntToStr(I));
- //Add(' ComboIndex: '+IntToStr(Work^.ComboIndex));
- //Add(' Adapter name: '+Work^.AdapterName);
- //Add(' Description: '+Work^.Description);
- //Add(' Adapter address: '+MACToStr(@Work^.Address,Work^.AddressLength));
- Result.Add(MACToStr(@Work^.Address, Work^.AddressLength));
- //Add(' Index: '+IntToStr(Work^.Index));
- //Add(' Type: '+IntToStr(Work^._Type));
- //Add(' DHCP: '+IntToStr(Work^.DHCPEnabled));
- //Add(' Current IP: '+GetAddrString(Work^.CurrentIPAddress));
- //Add(' IP addresses: '+GetAddrString(@Work^.IPAddressList));
- //Add(' Gateways: '+GetAddrString(@Work^.GatewayList));
- //Add(' DHCP servers: '+GetAddrString(@Work^.DHCPServer));
- //Add(' Has WINS: '+IntToStr(Integer(Work^.HaveWINS)));
- //Add(' Primary WINS: '+GetAddrString(@Work^.PrimaryWINSServer));
- //Add(' Secondary WINS: '+GetAddrString(@Work^.SecondaryWINSServer));
- //Add(' Lease obtained: '+TimeTToDateTimeStr(Work^.LeaseObtained));
- //Add(' Lease expires: '+TimeTToDateTimeStr(Work^.LeaseExpires));
- //Inc(I);
- Work := Work^.Next;
- Until (Work = nil);
- //Result:= Copy(Result, 1, 12);
- FreeMem(AI);
- end;
- end.
|