用Delphi獲取本地計(jì)算機(jī)名稱和IP地址

字號(hào):

本程序介紹如何獲取本地計(jì)算機(jī)的名稱和IP地址。
    向窗體上添加兩個(gè)TLabel組件、兩個(gè)TEdit組件和一個(gè)TButton組件,設(shè)計(jì)完成的主界面如圖1所示。
    圖1 主界面
    首先在程序的uses段中添加對(duì)WinSock的引用,然后添加一個(gè)GetHostName自定義函數(shù),在其中調(diào)用GetComputerName函數(shù)獲取計(jì)算機(jī)名稱,響應(yīng)代碼如下:
    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;
    添加一個(gè)NameToIP自定義函數(shù),在其中調(diào)用GetHostByName函數(shù)根據(jù)計(jì)算機(jī)名稱獲取計(jì)算機(jī)的IP地址,響應(yīng)代碼如下:
    function TfrmMain.NameToIP(Name:string):String;
    var
    WSAData: TWSAData;
    HostEnt: PHostEnt;
    begin
    result:='';
    WSAStartup(2, WSAData);
    HostEnt := GetHostByName(PChar(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:string):String;
    var
    WSAData: TWSAData;
    HostEnt: PHostEnt;
    begin
    result:='';
    WSAStartup(2, WSAData);
    HostEnt := GetHostByName(PChar(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.