http://redboy136.blog.163.com/blog/static/1071884322011817104145361/

用Delphi xe2获取本地计算机名称和IP地址  

2011-09-17 10:41:45|  分类: delphi xe2|举报|字号 订阅

 
 
  本程序介绍如何获取本地计算机的名称和IP地址。 
  向窗体上添加两个TLabel组件、两个TEdit组件和一个TButton组件,设计完成的主界面如图1所示。

用Delphi获取本地计算机名称和IP地址 - 鑫淼梦园 - 鑫淼梦园的博客
图1 主界面

  首先在程序的uses段中添加对WinSock的引用,然后添加一个GetHostName自定义函数,在其中调用GetComputerName函数获取计算机名称,响应代码如下:

uses WinSock;

function GetHostName: String;
var
  ComputerName: array[0..MAX_COMPUTERNAME_LENGTH + 1] of char;
  Size: Cardinal;
begin
  Result := '';
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  GetComputerName(ComputerName, Size);
  Result:=StrPas(ComputerName);
end;


  添加一个NameToIP自定义函数,在其中调用GetHostByName函数根据计算机名称获取计算机的IP地址,响应代码如下:
function NameToIP(Name: Ansistring): Variant;
var
  WSAData: TWSAData;
  HostEnt: PHostEnt;
  nSockErr: Integer;
  wVersionRequested: Word;
begin
  Result := '';
  nSockErr := WSAStartup(wVersionRequested, WSAData);
  HostEnt := GetHostByName(PAnsiChar(Name));
  if HostEnt <> nil then
  begin
      with HostEnt^ do
      Result := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
  end;
  WSACleanup;
end;

  程序代码如下:
unit Unit1;
interface
uses
Windows, Messages, Sys Utils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, WinSock;
 type
  TfrmMain = class(TForm)
  btnStart: TButton;
  edtIP: TEdit;
  edtName: TEdit;
  Label1: TLabel;
  Label2: TLabel;
  function GetHostName:String;
  procedure btnStartClick(Sender: TObject);
  function NameToIP(Name:string):String;
  private
   { Private declarations }
  public
   { Public declarations }
 end;
 var
  frmMain: TfrmMain;
  implementation
  {$R *.dfm}
  function TfrmMain.GetHostName:String;
 var
  ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
  Size: Cardinal;
 begin
  result:='';
  Size := MAX_COMPUTERNAME_LENGTH+1;
  GetComputerName(ComputerName, Size);
  Result:=StrPas(ComputerName);
 end;
 procedure TfrmMain.btnStartClick(Sender: TObject);
 begin
  edtName.Text:=GetHostName;
  edtIP.Text:=NameToIP(edtName.Text);
 end;
function TfrmMain.NameToIP(Name: Ansistring): Variant;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
nSockErr: Integer;
wVersionRequested: Word;
begin
Result := '';
nSockErr := WSAStartup(wVersionRequested, WSAData);
HostEnt := GetHostByName(PAnsiChar(Name));
if HostEnt <> nil then
begin
with HostEnt^ do
Result := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
end;
WSACleanup;
end;

end.

以上代码在delphi xe xe2通过


  保存文件,然后按F9键运行程序,程序运行的初始画面如图2所示。
  单击“开始”按钮,就会获取并显示本地计算机的名称和IP地址。程序运行结果如图3所示。

用Delphi获取本地计算机名称和IP地址 - 鑫淼梦园 - 鑫淼梦园的博客
图2 程序运行的初始画面
用Delphi获取本地计算机名称和IP地址 - 鑫淼梦园 - 鑫淼梦园的博客
图3 程序运行结果