获取多网卡IP地址(D7~XE5)和本机计算机名称

来源:互联网 发布:python爬付费课程 编辑:程序博客网 时间:2024/05/24 06:38
方法一:D2010以前版本,以DELPHI7为例
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls,WinSock, Menus;type  TForm1 = class(TForm)    memo1: TMemo;    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}function MYComputerName: string;var  FStr: PChar;  FSize: Cardinal;begin  FSize := 255;  GetMem(FStr, FSize);  Windows.GetComputerName(FStr, FSize);  Result := FStr;  FreeMem(FStr);end;function GetLocalIpList(var IpList: TStringList): Integer;type  TaPInAddr = array[0..10] of PInAddr;  PaPInAddr = ^TaPInAddr;var  HostName: array[0..MAX_PATH] of Char;  NameLen: Integer;  WSData: TWSAData;  lpHostEnt: PHostEnt;  I: Integer;  pptr: PaPInAddr;begin  Result := 0;  if WSAStartup(MakeWord(2, 0), WSData) <> 0 then    Exit;  try    NameLen := sizeof(HostName);    fillchar(HostName, NameLen, 0);    NameLen := GetHostName(HostName, NameLen);    if NameLen = SOCKET_ERROR then      Exit;    lpHostEnt := GetHostByName(HostName);    if lpHostEnt = nil then      Exit;    I := 0;    pPtr := PaPInAddr(lpHostEnt^.h_addr_list);    IpList.Clear;    while pPtr^[I] <> nil do      begin        IpList.ADD(inet_ntoa(pptr^[I]^));        Inc(I);      end;    Result := IpList.Count;  finally    WSACleanup;  end;end;procedure TForm1.Button1Click(Sender: TObject);var  IpList1: TStringList;begin  IpList1 := TStringList.Create;  GetLocalIpList(IpList1);  self.memo1.Lines.Text := IpList1.Text;  IpList1.Free;end;end.
方法二:DELPHI2010以后版本,以XE5为例
unit Unit1;interfaceuses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, winsock, sButton, StdCtrls, sMemo;type  TForm1 = class(TForm)    memo1: TMemo;    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}function MYComputerName: string;var  FStr: PChar;  FSize: Cardinal;begin  FSize := 255;  GetMem(FStr, FSize);  Winapi.Windows.GetComputerName(FStr, FSize);  Result := FStr;  FreeMem(FStr);end;function GetLocalIpList(var IpList: TStringList): Integer;type  TaPInAddr = array[0..10] of PInAddr;  PaPInAddr = ^TaPInAddr;var  HostName: array[0..MAX_PATH] of AnsiChar;  NameLen: Integer;  WSData: TWSAData;  lpHostEnt: PHostEnt;  I: Integer;  pptr: PaPInAddr;begin  Result := 0;  if WSAStartup(MakeWord(2, 0), WSData) <> 0 then    Exit;  try    NameLen := sizeof(HostName);    fillchar(HostName, NameLen, 0);    NameLen := GetHostName(HostName, NameLen);    if NameLen = SOCKET_ERROR then      Exit;    lpHostEnt := GetHostByName(HostName);    if lpHostEnt = nil then      Exit;    I := 0;    pPtr := PaPInAddr(lpHostEnt^.h_addr_list);    IpList.Clear;    while pPtr^[I] <> nil do      begin        IpList.ADD(inet_ntoa(pptr^[I]^));        Inc(I);      end;    Result := IpList.Count;  finally    WSACleanup;  end;end;procedure TForm1.Button1Click(Sender: TObject);var  IpList1: TStringList;begin  IpList1 := TStringList.Create;  GetLocalIpList(IpList1);  self.memo1.Lines.Text := IpList1.Text;  IpList1.Free;end;end.

0 0