有没有一个函数可以求的计算机名

解决方案 »

  1.   

    uses winsock
    procedure TForm1.Button1Click(Sender: TObject);
    var
      dd:array[0..44] of char;
    begin
      gethostname(dd,45);
      showmessage(dd);
      

  2.   

    解析IP地址为主机域名。 
    使用 WinSock 单元;过程如下:function IPAddrToName(IPAddr : String): String;varSockAddrIn: TSockAddrIn;HostEnt: PHostEnt;WSAData: TWSAData;beginWSAStartup($101, WSAData);SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);if HostEnt<>nil thenbeginresult:=StrPas(Hostent^.h_name)endelsebeginresult:='';end;end; 测试时请在在线状态。测试代码:varName: string;beginName := InputBox('输入对方主机IP', '主机IP地址:', '');showmessage(IpAddrToName(Name));end;作者:Latfi Baran******************************//uses winsock; 通过IP地址得到机器名function iptoname(ip:string):string;varWSAData:TWSAData;p:PHostEnt;InetAddr:dword;beginresult:='''';WSAStartup(2, WSAData);InetAddr:= inet_addr(PChar(IP));tryp:=GetHostByAddr(@InetAddr, Length(IP), PF_Inet);if p<> nil then result:=p^.h_name;exceptresult:='''';end;end;这段代码我试过, 不过只对局域网的机器有效,对internet上的机器不行,且速度不太快我有看到相关的资料,是通过udp协议,往远程机器的137端口发送UDP报文,远程机器会返回数据,其中就有远程机器的当前用户名,机器名称等信息,但如何具体实现我就不太清楚了 
      

  3.   

    function HostName: string;//得到本机的名字
    var
      Buffer: array[0..127] of char;
      GInitData: TWSADATA;
    begin
      WSAStartup($101, GInitData);
      result := '';
      GetHostName(Buffer, Sizeof(Buffer));
      result := StrPas(Buffer);
      WSACleanup;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      szComputerName : array[0..255] of char;
      nSize : Cardinal;
    begin
      FillChar( szComputerName, sizeof(szComputerName), 0 );
      nSize := MAX_COMPUTERNAME_LENGTH + 1;
      GetComputerName( szComputerName, nSize );
      if StrPas( szComputerName )= '' then
        edit1.Text :=''
      else
        edit1.Text := StrPas( szComputerName );//显示计算器的名字end;