DELPHI有这么的函数吗?或者WIN API有这样的函数也成。一定给分。

解决方案 »

  1.   

    获得机器名
    NetGetDCName( NULL,                    /* Local Machine */
                       lpszDomain,                  /* Domain Name */
                       (LPBYTE *)&lpszPrimaryDC );  /* returned PDC */获得ip
    function GetIPFromName(Name: string): string;
    var
      WSAData: TWSAData;
      HostEnt: PHostEnt;
    begin
      WSAStartup(2, WSAData);
      HostEnt := gethostbyname(PChar(Name));
      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])]);
      WSACleanup;
    end;
      

  2.   

    刚才试了一下,UNIT的WINDOWS里面没有申明,不知道这个函数是被哪个DLL所支持。请帮我写以下函数声明,谢谢了。
      

  3.   

    //获得IP
    function Tfrmmain.LocalIP: string;
    type
        TaPInAddr = array[0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe: PHostEnt;
        pptr: PaPInAddr;
        Buffer: Array[0..63] of Char;
        I: Integer;
        GInitData: TWSAData;
    begin
        WSAStartup($101,GInitData);
        Result := '';
        GetHostName(Buffer,SizeOf(Buffer));
        phe := GetHostByName(buffer);
        if phe = nil then exit;
        pPtr := PaPInAddr(phe^.h_addr_list);
        I := 0;
        while pPtr^[I] <> nil do
        begin
            Result := inet_ntoa(pptr^[I]^);
            Inc(I);
        end;
        WSACleanup;
    end;
    //IP到机名的转换
    function Tfrmmain.IPAddrToName(IPAddr: String): String;
    var
        SockAddrIn: TSockAddrIn;
        HostEnt: PHostEnt;
        WSAData: TWSAData;
    begin
        WSAStartup($101,WSAData);
        SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
        HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr,4,AF_INET);
        if HostEnt<>nil then result:=StrPas(Hostent^.h_name)
        else result:='';
    end;
    //使用方法
    Edit1.Text:=LocalIP;   //读取IP
    Edit2.Text:=IPAddrToName(Edit1.Text);  //读取计算机名