您的位置:首页 > 理论基础

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

2014-01-02 15:53 204 查看
方法一:D2010以前版本,以DELPHI7为例
unit Unit1;

interface

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

interface

uses
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐