netcardaddr.pas

来自「使用IPHlp函数库取得所有网卡的地址」· PAS 代码 · 共 65 行

PAS
65
字号
uses IPHlpAPI,IPTypes,IPIfConst;

function GetDiskSerialNo(Disk: Char): string;
var
  dwTemp1,dwTemp2,I: DWord;
begin
  GetVolumeInformation(PChar(Disk + ':\'), nil, 0,
    @I, dwTemp2,dwTemp2,nil,0);
  Result := IntToHex(I,4);
end;

function GetNetCardMac: string;
var
  Info: PIP_ADAPTER_INFO;
  Len: DWOrd;
  P: Pointer;
  E: Integer;
begin
  Result := '';
  Len := 0;
  if GetAdaptersInfo(nil, Len) <> ERROR_BUFFER_OVERFLOW then Exit;
  GetMem(Info,Len);
  try
    E := GetAdaptersInfo(Info,Len);
    if E <> NO_ERROR then
      raise Exception.Create(SysErrorMessage(E));
    //Info.Index
    P := Info;
    if P <> nil then
      Result := MacAddr2Str(IP_ADAPTER_INFO(P^).Address,IP_ADAPTER_INFO(P^).AddressLength);
  finally
    FreeMem(Info);
  end;
end;

function GetAllNetCardMac: string;
var
  Info: PIP_ADAPTER_INFO;
  Len: DWOrd;
  P: Pointer;
  E: Integer;
  Macs: TStrings;
begin
  Result := '';
  Len := 0;
  if GetAdaptersInfo(nil, Len) <> ERROR_BUFFER_OVERFLOW then Exit;
  GetMem(Info,Len);
  Macs := TStringList.Create;
  try
    E := GetAdaptersInfo(Info,Len);
    if E <> NO_ERROR then
      raise Exception.Create(SysErrorMessage(E));
    P := Info;
    while P <> nil do
    begin
      Macs.Add(MacAddr2Str(IP_ADAPTER_INFO(P^).Address,IP_ADAPTER_INFO(P^).AddressLength));
      P := IP_ADAPTER_INFO(P^).Next;
    end;
    TStringList(Macs).Sort;
    Result := Macs.CommaText;
  finally
    FreeMem(Info);
    Macs.Free;
  end;
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?