根据计算机名得到IP地址的函数:
uses
  WinSock;function GetIPByName(AName: String): 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 := '';
  StrPCopy(Buffer, AName);
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pptr := PaPInAddr(Phe^.h_addr_list);
  I := 0;
  while pptr^[I] <> nil do
  begin
    Result:=StrPas(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;用法:
  Ipstr := GetIPByName(ComputerName);

解决方案 »

  1.   

    Michaelyfj(迈克儿) 你好:
        请问你是怎样知道这些函数和类型的,看书吗?
        我是菜鸟?还望指教!
        我的E_Mail:[email protected]
      

  2.   

    这是我用过的一个。去参改
    function BrowseForComputer(const winhandle : THANDLE; const Title : string) : string;
    var
      BrowseInfo: TBrowseInfo;
      IDRoot: PItemIDList;
      Path:array[0..MAX_PATH] of Char;   //被选择的计算机名
      S:String;
      MyHost:PHostEnt;
      I:byte;
    begin
      S:='';
      SHGetSpecialFolderLocation(winHandle, CSIDL_NETWORK , IDRoot);//获取网上邻居ID列表
      ZeroMemory(@BrowseInfo, SizeOf(TBrowseInfo));  //内存清零
      ZeroMemory(@path[1], MAX_PATH);                //内存清零
      BrowseInfo.hwndOwner := winhandle;
      BrowseInfo.pidlRoot := IDRoot;
      BrowseInfo.lpszTitle := PChar(Title);
      BrowseInfo.pszDisplayName := @path;
      BrowseInfo.ulFlags := BIF_BROWSEFORCOMPUTER;//or BIF_RETURNONLYFSDIRS
      if SHBrowseForFolder(BrowseInfo)=nil then Exit;
     
      {***以下根据计算机名获取IP地址***}
      MyHost:=GetHostByName(@Path[0]);
      if MyHost=nil then S:='该计算机已关闭' else
      for I:=1 to 4 do S:=S+IntToStr(Ord(MyHost.h_addr^[I-1]))+'.';
      Result:=Copy(S,1,Length(S)-1);
    end;