delphi 获取网卡信息(支持多网卡)
delphi 获取网卡信息(支持多网卡) unit LGetAdapterInfo; interface uses Windows, SysUtils, Classes; const MAX_HOSTNAME_LEN = ; { from IPTYPES.H } MAX_DOMAIN_NAME_LEN = ; MAX_SCOPE_ID_LEN = ; MAX_ADAPTER_NAME_LENGTH = ; MAX_ADAPTER_DESCRIPTION_LENGTH = ; MAX_ADAPTER_ADDRESS_LENGTH = ; type TIPAddressString = array[.. * - ] of AnsiChar; PIPAddrString = ^TIPAddrString; TIPAddrString = record Next: PIPAddrString; IPAddress: TIPAddressString; IPMask: TIPAddressString; Context: Integer; end; PFixedInfo = ^TFixedInfo; TFixedInfo = record { FIXED_INFO } HostName: array[..MAX_HOSTNAME_LEN + ] of AnsiChar; DomainName: array[..MAX_DOMAIN_NAME_LEN + ] of AnsiChar; CurrentDNSServer: PIPAddrString; DNSServerList: TIPAddrString; NodeType: Integer; ScopeId: array[..MAX_SCOPE_ID_LEN + ] of AnsiChar; EnableRouting: Integer; EnableProxy: Integer; EnableDNS: Integer; end; PIPAdapterInfo = ^TIPAdapterInfo; TIPAdapterInfo = record { IP_ADAPTER_INFO } Next: PIPAdapterInfo; ComboIndex: Integer; AdapterName: array[..MAX_ADAPTER_NAME_LENGTH + ] of AnsiChar; Description: array[..MAX_ADAPTER_DESCRIPTION_LENGTH + ] of AnsiChar; AddressLength: Integer; Address: array[..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 > ) do begin Result := Result + IntToHex(ByteArr^, ) + '-'; ByteArr := Pointer(Integer(ByteArr) + SizeOf(Byte)); Dec(Len); end; SetLength(Result, Length(Result) - ); { remove last dash } end; function GetAddrString(Addr: PIPAddrString): string; begin Result := ''; while (Addr <> nil) do begin Result := Result + 'A: ' + Addr^.IPAddress + ' M: ' + Addr^.IPMask + #; Addr := Addr^.Next; end; end; function TimeTToDateTimeStr(TimeT: Integer): string; const UnixDateDelta = ; { days between12/31/1899and 1/1/1970 } var DT: TDateTime; TZ: TTimeZoneInformation; Res: DWord; begin if (TimeT = ) then Result := '' else begin { Unix TIME_T is secs since1/1/1970} DT := UnixDateDelta + (TimeT / ( * * )); { 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) / ( * )); Result := DateTimeToStr(DT) + ' ' + WideCharToString(TZ.StandardName); end else begin { daylight saving time } DT := DT - ((TZ.Bias + TZ.DaylightBias) / ( * )); Result := DateTimeToStr(DT) + ' ' + WideCharToString(TZ.DaylightName); end; end; end; function GetAdapterInfo: TList; var AAdapterInfo: TAdapterInfo; AAdapterInfos: TList; begin Size := ; GetMem(AI, Size); Res := GetAdaptersInfo(AI, Size); if (Res <> ERROR_SUCCESS) then begin SetLastError(Res); RaiseLastWin32Error; end; Work := AI; I := ; 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)) + , Pos(' M: ', GetAddrString(@Work^.IPAddressList)) - Pos('A: ', GetAddrString(@Work^.IPAddressList)) - ); AAdapterInfo.Subnetmask := Copy(GetAddrString(@Work^.IPAddressList), Pos(' M: ', GetAddrString(@Work^.IPAddressList)) + , length(GetAddrString(@Work^.IPAddressList))); AAdapterInfo.Gateway := Copy(GetAddrString(@Work^.GatewayList), Pos('A: ', GetAddrString(@Work^.GatewayList)) + , Pos(' M: ', GetAddrString(@Work^.GatewayList)) - Pos('A: ', GetAddrString(@Work^.GatewayList)) - ); AAdapterInfo.MacAddress := MACToStr(@Work^.Address, Work^.AddressLength); AAdapterInfo.DHCP := Work^.DHCPEnabled > ; AAdapterInfo.DHCPServer := Copy(GetAddrString(@Work^.DHCPServer), Pos('A: ', GetAddrString(@Work^.DHCPServer)) + , Pos(' M: ', GetAddrString(@Work^.DHCPServer)) - Pos('A: ', GetAddrString(@Work^.DHCPServer)) - ); 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 := to aa.Count - do begin Memo1.Lines.Add(TAdapterInfo(aa.Items[i]).AdapterName); end; end;
delphi 获取网卡信息(支持多网卡)的更多相关文章
- delphi 获取硬盘序列号、cpu号、bios号、网卡号
delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...
- 基于WMI获取本机真实网卡物理地址和IP地址
using System; using System.Collections.Generic; using System.Management; using System.Runtime.Intero ...
- Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径
取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Function Extrac ...
- Java API研究:获取本地环境所有网卡及每个网卡的所有网络配置
一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如SoftAP)拥有一套网络配置:ip地址,子网掩码,网关,dns等等. 自java 1.6开始,提供了访问网络配置的一些接 ...
- Windows Azure Virtual Machine (24) Azure VM支持多网卡功能
<Windows Azure Platform 系列文章目录> Update 2016-03-30 一个VM的多张网卡可以在一个VNet的同一个Subnet子网下,笔者亲自测试过了. 如果 ...
- Delphi 获取进程路径及命令行参数
Delphi 获取进程路径及命令行参数, 但有的进程获取时会报错,不知为啥 type PVOID64 = UINT64; _UNICODE_STRING = packed record Length ...
- Delphi 获取当前鼠标下的控件内容
Delphi 获取当前鼠标下的控件内容 主要函数: GetCursorPos://获取鼠标的位置 WindowFromPoint://获取制定point下的handle GetClassName:// ...
- 4.移植uboot-使uboot支持DM9000网卡
在上一章,使uboot能够支持nor.nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的d ...
- Delphi获取本机的MAC地址
Delphi获取本机的MAC地址: uses NB30; function GetAdaPterInfo(lana: Char): string; var Adapter: TAdapterS ...
随机推荐
- 路由表及route使用
路由表 linux下通过route可以查看本地路由表: Kernel IP routing table Destination Gateway Genmask ...
- Linux系统分区方案建议
在安装Linux系统之初,就应该考虑怎样使linux系统得到最好的性能.linux本身也设计为可以良好扩展的形态. 笔者建议系统程序和业务程序分离安装比较合理,笔者所在的公司也是按照这种理念实施的.比 ...
- SecureCRT 用ssh key登录配置方法
服务器端配置 OS: Debian-6.0.5 复制代码 代码如下: #apt-get install ssh 安装ssh服务 编辑/etc/ssh/sshd_config配置文件 复制代码 代码如下 ...
- win7怎么把软件加入开机启动项
点击开机菜单进入. 2 然后点击菜单栏中的所有程序. 3 在所有程序中找到‘启动’,这个启动就是开机启动项来的. 4 右键进行打开启动项. 5 把快捷方式复制到开机启动项中.如果找不到快捷方式可以右键 ...
- [Django学习]模型
ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...
- history统计命令最多的20条
1.1.1 统计使用命令最多的20条 [root@ob1 ~]# history|awk '{ml[$2]++}END{for (i in ml) print i,ml[i]}'|sort -nrk ...
- 用户数据验证的正确姿势之assert
用户数据验证灰常重要, 不用多说了, 但是实现方法(准确的说是表现形式)有很多人, 如何优雅的完成一个后端验证过滤器是一个值得考量的问题, 我尝试过许多方法, 比如validator.js模块, ex ...
- easyui中datagrid用法,加载table数据与标题
加载标题写法: 多行标题:columns: [[ columns: [[ { field: 'itemid', title: 'Item ID', rows ...
- Jquery仿IGoogle实现可拖动窗口(源码)
google可谓是ajax的特效用的淋漓尽致,google suggest, google map,igoogle 可拖动窗口等等...今天仿照iGoogle做了一个简单的小demo. 这个的demo ...
- CentOS安装Emacs文本编辑器
我这里安装的是:emacs.24.2 下载地址:http://ftp.gnu.org/pub/gnu/emacs/emacs-24.2.tar.gz 下载文件:emacs-24.2.tar.gz 步骤 ...