uses Winsock;procedure ShowHostName;
var
  wVersionRequested : WORD;
  wsaData : TWSAData;
  p : PHostEnt;
  s : array[0..128] of char;
  p2 : pchar;
begin
{启动 WinSock}
  wVersionRequested := MAKEWORD(1, 1);
  WSAStartup(wVersionRequested, wsaData);{计算机名}
  GetHostName(@s, 128);
  p := GetHostByName(@s);
  ShowMessage(Format('Computer name is ''%s''.', [p^.h_Name]));{IP地址}
  p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
  ShowMessage(Format('IP address is %s.',[p2]));  WSACleanup;
end;

解决方案 »

  1.   

    上面是用winsock实现
    其实还有多种方法来得到ip
    temp:string;
    begin
      temp:='c:\temp.txt';
      if fileexists(temp) then
        deletefile(temp);
      winexec(pchar('command.com /c ipconfig/all>'+temp),sw_hide);
      if not fileexists(temp) then
        sleep(1000);
      try
        memo1.lines.loadfromfile(tem);
      except
      end;
    end;
      

  2.   

    procedure Tcontrolcenter.Button1Click(Sender: TObject);
    var
     i:integer;
     errcode:integer;
     netres:array[0..1023] of netresource;
     enumhandle:thandle;
     enumentries:dword;
     buffersize:dword;
    begin 
      begin
       dwscope :=RESOURCE_GLOBALNET;
       dwtype :=RESOURCETYPE_ANY;
       dwdisplaytype :=RESOURCEDISPLAYTYPE_DOMAIN;
       dwusage :=RESOURCEUSAGE_CONTAINER;
       lplocalname :=nil;
       lpremotename :=nil;
       lpcomment :=nil;
       lpprovider :=nil;
      end; // 获取所有的域
     errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
     if errcode=NO_ERROR then
      begin
       enumentries:=1024;
       buffersize:=sizeof(netres);
       errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
      end;
     ListBox1.Items.Text:='';
     if errcode=No_Error then
      begin
       for i:=0 to High(netres)-1 do
        if netres[i].dwType<>0 then
         if netres[i].lpRemoteName<>'' then
          ListBox1.Items.Add(netres[i].lpRemoteName);
      end;
    end;procedure Tcontrolcenter.ListBox1Click(Sender: TObject);
    var
     i:integer;
     errcode:integer;
     netres:array[0..1023] of netresource;
     enumhandle:thandle;
     enumentries:dword;
     buffersize:dword;
    begin
     if ListBox1.Items.Strings[ListBox1.ItemIndex]='' then
      begin
       Exit;
      end;
     with netres[0] do
      begin
       dwscope :=RESOURCE_GLOBALNET;
       dwtype :=RESOURCETYPE_ANY;
       dwdisplaytype :=RESOURCEDISPLAYTYPE_SERVER;
       dwusage :=RESOURCEUSAGE_CONTAINER;
       lplocalname :=nil;
       lpremotename :=pchar(ListBox1.Items.Strings[ListBox1.ItemIndex]);
       lpcomment :=nil;
       lpprovider :=nil;
      end;// 获取所有的计算机
     ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
     if errcode=NO_ERROR then
      begin
       EnumEntries:=1024;
       BufferSize:=SizeOf(NetRes);
       ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
      end; ListBox2.Items.Text:='';
     if errcode=No_Error then
      begin
       for i:=0 to High(netres)-1 do
        begin
         if netres[i].dwType<>02 then
          if netres[i].lpRemoteName<>'' then
           ListBox2.Items.Add(netres[i].lpRemoteName);
        end;
      end;
    end;
    这个资料是从哪里看到的,我也忘了
      

  3.   

    alongla918(阿龙),对不起,你的太长,我没有试。
    johnsonrao(johnson) 的最好