⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 取网络的信息的源代码
💻 ~PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Info: TMemo;
    Panel1: TPanel;
    btnGetInfo: TBitBtn;
    procedure btnGetInfoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure GetNetworkParameters;
    Procedure GetAdapterInformation;
  end;

var
  Form1: TForm1;
  aDnsList:TStrings;

implementation

{$R *.DFM}

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 Char;

  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 Char;
    DomainName       : Array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
    CurrentDNSServer : PIPAddrString;
    DNSServerList    : TIPAddrString;
    NodeType         : Integer;
    ScopeId          : Array[0..MAX_SCOPE_ID_LEN+3] of Char;
    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 Char;
    Description         : Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3] of Char;
    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';

procedure TForm1.btnGetInfoClick(Sender: TObject);
begin
  GetNetworkParameters;
  GetAdapterInformation;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  aDnsList:=TStringList.Create;
end;

procedure TForm1.GetAdapterInformation;
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)-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 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;
  With Info,Lines do Begin
    Work := AI;
    I := 1;
    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));
      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);
  End;
  FreeMem(AI);
end;

procedure TForm1.GetNetworkParameters;
Var
  FI   : PFixedInfo;
  Size : Integer;
  Res  : Integer;
  I    : Integer;
  DNS  : PIPAddrString;

begin
  Size := 1024;
  GetMem(FI,Size);
  Res := GetNetworkParams(FI,Size);
  If (Res <> ERROR_SUCCESS) Then Begin
    SetLastError(Res);
    RaiseLastWin32Error;
  End;
  With Info do Begin
    Clear;
    Lines.Add('Host name: '+FI^.HostName);
    Lines.Add('Domain name: '+FI^.DomainName);
    aDnsList.Clear;
    If (FI^.CurrentDNSServer <> nil) Then
    begin
      Lines.Add('Current DNS Server: '+FI^.CurrentDNSServer^.IPAddress);
    end
    Else Lines.Add('Current DNS Server: (none)');
    I := 1;
    DNS := @FI^.DNSServerList;
    Repeat
      Lines.Add('DNS '+IntToStr(I)+': '+DNS^.IPAddress);
      aDnsList.Add(DNS^.IPAddress);
      Inc(I);
      DNS := DNS^.Next;
    Until (DNS = nil);
    Lines.Add('Scope ID: '+FI^.ScopeId);
    Lines.Add('Routing: '+IntToStr(FI^.EnableRouting));
    Lines.Add('Proxy: '+IntToStr(FI^.EnableProxy));
    Lines.Add('DNS: '+IntToStr(FI^.EnableDNS));
  End;
  FreeMem(FI);
end;

end.
 

⌨️ 快捷键说明

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