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 ...
随机推荐
- 嘿, 你知道吗, 再也不需要for循环了!
做一个优雅的程序员 JavaScript是一门优雅的语言, 这个'优雅'体验在JS逻辑层次处于高段位的水平, 什么意思呢, 就是一个js应用的主线剧情一定全部是函数式表达的高层可读逻辑, 还是不懂? ...
- 轻量级ORM框架Dapper应用六:Dapper支持存储过程
在Entity Framework中讲解了EF如何支持存储过程,同样,Dapper也支持存储过程,只需要在Query()方法的CommandType中标记使用的是存储过程就可以了.在Users表上面创 ...
- 清除DataGridView显示的数据
一.DataGridView未绑定数据时清空数据 this.dgv_PropDemo.DataSource = null 二.DataGridView绑定数据时清空数据 DataGridView绑定了 ...
- DataGridView使用技巧五:自动设定列宽和行高
一.设定行高和列宽自动调整 设定包括Header和所有单元格的列宽自动调整 //设置包括Header和所有单元格的列宽自动调整 this.dgv_PropDemo.AutoSizeColumnsMod ...
- PHP7新特性的介绍
关于PHP 20年的发展历史: 迄今为止最流行的WEB开发语言: 超过82%的网站都会使用PHP作为他们的服务端开发语言: 新特性介绍 PHP NG – Zend Engine 3 抽象语法树 64位 ...
- 统一建模语言 UML (2)
UML的图 1.用例图(use case diagram) 用例图(Use Case Diagram)是被称为参与者(Actor)的外部用户所能观察到的系统功能的模型图 列出系统中的用例和参与者 显示 ...
- samba的使用
第一步:了解它 为了实现Window主机与Linux服务器之间的资源共享,Linux操作系统提供了 Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使 Linux 系统和Window ...
- 下面属于javascript对象的有:( )
下面属于javascript对象的有:( ) A. Window B. Document C. Form D. String E. Navigator 解答:ACE
- Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)
在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可 ...
- perl 中的哈希赋值
在perl 中,通过代码动态的给哈希赋值,是最常见的应用场景,但是有些情况下,我们事先知道一些信息,当需要把这些信息存放进一个哈希的时候,直接给哈希赋值就好: 哈希的key不用说,就是一个字符串,关键 ...