delphi 获取网卡信息(支持多网卡) unit LGetAdapterInfo; interface uses Windows,SysUtils,Classes; 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; TAdapterInfo = class(TObject) Index: Integer; //序号 AdapterName: string; //网卡名 IPAddress: string; //IP地址 subnetmask: string; //子网掩码 Gateway: string; //网关 MacAddress: string; //MAC地址 DHCP: Boolean; //是否是自动分配 DHcpserver: string; //DHCP服务器地址 end; function SendARP(ipaddr: ulong; temp: dword; ulmacaddr: pointer; ulmacaddrleng: pointer): DWord; StdCall; function GetAdapterInfo: TList; var AI,Work: PIPAdapterInfo; Size: Integer; Res: Integer; I: Integer; implementation function SendARP; external ‘Iphlpapi.dll‘ Name ‘SendARP‘; function GetAdaptersInfo(AI: PIPAdapterInfo; var BufLen: Integer): Integer; stdcall; external ‘iphlpapi.dll‘ Name ‘GetAdaptersInfo‘; 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) - 1); { remove last dash } 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 between12/31/1899and 1/1/1970 } var DT: TDateTime; TZ: TTimeZone@R_209_4045@ion; Res: DWord; begin if (TimeT = 0) then Result := ‘‘ else begin { Unix TIME_T is secs since1/1/1970} DT := UnixDateDelta + (TimeT / (24 * 60 * 60)); { in UTC } { calculate bias } Res := GetTimeZone@R_209_4045@ion(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; function GetAdapterInfo: TList; var AAdapterInfo: TAdapterInfo; AAdapterInfos: TList; begin Size := 5120; GetMem(AI,Size); Res := GetAdaptersInfo(AI,Size); if (Res <> ERROR_SUCCESS) then begin SetLastError(Res); RaiseLastWin32Error; end; Work := AI; I := 1; AAdapterInfos := TList.Create; repeat AAdapterInfo := TAdapterInfo.Create; AAdapterInfo.Index := I; AAdapterInfo.AdapterName := Work^.Description; AAdapterInfo.IPAddress := copy(GetAddrString(@Work^.IPAddressList),Pos(‘A: ‘,GetAddrString(@Work^.IPAddressList)) + 3,Pos(‘ M: ‘,GetAddrString(@Work^.IPAddressList)) - Pos(‘A: ‘,GetAddrString(@Work^.IPAddressList)) - 3); AAdapterInfo.subnetmask := copy(GetAddrString(@Work^.IPAddressList),Pos(‘ M: ‘,GetAddrString(@Work^.IPAddressList)) + 4,length(GetAddrString(@Work^.IPAddressList))); AAdapterInfo.Gateway := copy(GetAddrString(@Work^.GatewayList),Pos(‘A: ‘,GetAddrString(@Work^.GatewayList)) + 3,GetAddrString(@Work^.GatewayList)) - Pos(‘A: ‘,GetAddrString(@Work^.GatewayList)) - 3); AAdapterInfo.MacAddress := MACToStr(@Work^.Address,Work^.AddressLength); AAdapterInfo.DHCP := Work^.DHCPEnabled > 0; AAdapterInfo.DHcpserver := copy(GetAddrString(@Work^.DHcpserver),GetAddrString(@Work^.DHcpserver)) + 3,GetAddrString(@Work^.DHcpserver)) - Pos(‘A: ‘,GetAddrString(@Work^.DHcpserver)) - 3); AAdapterInfos.Add(AAdapterInfo); Inc(I); Work := Work^.Next; until (Work = nil); Result :=AAdapterInfos; FreeMem(AI); end; end. 使用方法 : procedure TForm1.Button2Click(Sender: TObject); var aa:TList; i :Integer; begin aa :=GetAdapterInfo; for i := 0 to aa.Count - 1 do begin Memo1.Lines.Add(TAdapterInfo(aa.Items[i]).AdapterName); end; end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。