procedure TForm1.ButtonIPClick(Sender: TObject);
  type
    TaPInAddr = Array[0..10] of PInAddr;
    PaPInAddr = ^TaPInAddr;
  var
    phe: PHostEnt;
    pptr: PaPInAddr;
    Buffer: Array[0..63] of Char;
    I: Integer;
    GInitData: TWSAData;
    IP: String;
begin
    Screen.Cursor := crHourGlass;
    try
      WSAStartup($101, GInitData);
      IP:='0.0.0.0';
      GetHostName(Buffer, SizeOf(Buffer));
      phe := GetHostByName(buffer);
      if phe = nil then
      begin
        ShowMessage(IP);
        Exit;
      end;
      pPtr := PaPInAddr(phe^.h_addr_list);
      I := 0;
      while pPtr^[I] <> nil do
       begin
        IP := inet_ntoa(pptr^[I]^);
        Inc(I);
       end;
      WSACleanup;
      ShowMessage(IP);
    finally
      Screen.Cursor := crDefault;
    end;
end;

解决方案 »

  1.   

    我有VC++获得本机IP地址的原码,如果你需要可发EMAIL给我. 我认为原理应该是一样的.
    IP地址有时有两个,一个为本机网卡的IP地址,另一个为ISP分配的IP地址,你需要哪一个IP地址?
      

  2.   

    什么嘛!用GetHostName不就行了?
      

  3.   

    试试下面的函数:uses ...,WinSock;
    ...function GetLocalHostIP: String;//取得本机的IP地址
    var IP: String
        ia: in_addr;
    begin
      SetLength(IP, 255);
      gethostname(PChar(IP), Length(IP));
      phs := gethostbyname(PChar(IP));
      if phs <> nil then
      begin
        CopyMemory(@ia.S_addr, phs^.h_addr^, SizeOf(ia.S_addr));
        StrCopy(PChar(IP), inet_ntoa(ia));
      end;
      Result := IP;
    end;
      

  4.   

    同意Lin的说法。
    To ljm:
      然而ISP分配的IP地址如何得到?
      Please Mail to:[email protected]
      

  5.   

    to ljm:
    能给我一份吗?关于获取isp分配的IP地址
    mail:[email protected]
      

  6.   

    不写程序也行:
    ping selfname
      

  7.   

    如果不是非要写程序,winipcfg也可以.
    如果仅是为了要ip,在程序中调用它也可以嘛