2016-12-09

【Delphi】取得自己電腦的 IP

參考資料 ----
Determine Your IP with Delphi


在 Form 上放置 2 個 TEdit 和 1 個 TButton
  1.  
  2. uses
  3. ..., winsock;
  4.  
  5. ...
  6. ...
  7.  
  8. implementation
  9.  
  10. {$R *.dfm}
  11.  
  12. function GetIPFromHost (var HostName, IPaddr, WSAErr: string): Boolean;
  13. type
  14. // Name = array[0..100] of Char; // Delphi 7(D7) 的寫法
  15. Name = array[0..100] of AnsiChar; // Delphi2009 以後的寫法
  16. PName = ^Name;
  17. var
  18. HEnt: pHostEnt;
  19. HName: PName;
  20. WSAData: TWSAData;
  21. i: Integer;
  22. begin
  23. Result := False;
  24. if WSAStartup($0101, WSAData)<>0 then
  25. begin
  26. WSAErr := 'Winsock is not responding."';
  27. Exit;
  28. end;
  29.  
  30. IPaddr := '';
  31. New(HName);
  32. if GetHostName(HName^, SizeOf(Name)) = 0 then
  33. begin
  34. HostName := StrPas(HName^);
  35. HEnt := GetHostByName(HName^);
  36. for i:=0 to (HEnt^.h_length-1) do
  37. IPaddr := Concat(IPaddr, IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
  38. SetLength(IPaddr, Length(IPaddr) - 1);
  39. Result := True;
  40. end
  41. else
  42. begin
  43. case WSAGetLastError of
  44. WSANOTINITIALISED: WSAErr := 'WSANotInitialised';
  45. WSAENETDOWN : WSAErr := 'WSAENetDown';
  46. WSAEINPROGRESS : WSAErr := 'WSAEInProgress';
  47. end;
  48. end;
  49. Dispose(HName);
  50. WSACleanup;
  51. end;
  52.  
  53. procedure TForm1.Button1Click(Sender: TObject);
  54. var
  55. Host, IP, Err: string;
  56. begin
  57. if GetIPFromHost(Host, IP, Err) then
  58. begin
  59. Edit1.Text := Host;
  60. Edit2.Text := IP;
  61. end
  62. else
  63. MessageDlg(Err, mtError, [mbOk], 0);
  64. end;
  65.  
  66.  

沒有留言:

張貼留言