方法一: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.