Author:InSun

Blog:http://yxmhero1989.blog.163.com/    

From:www.4safer.com

最近用Delphi写个综合性的软件,对于进程方面的也在研究,将会有文章出示。

在编写系统方面,要Delphi实现内外网IP的获取。

关键字:Delphi获取内外网IP

Delphi - InSun - InSuns PaRaDise

 以前用VB写过,参见:

VB获取计算机名称,内、外网IP

地址:">http://yxmhero.qupan.com/5246067.html

VB获取计算机名称,内、外网IP,很简单,仅作示例。这些在编大软件时作为装饰。

Author:Minghacker

From:http://yxmhero1989.blog.163.com/

添加winsock控件,Inet控件

Private Declare Function ReleaseCapture Lib "user32" () As Long none窗体的移动
       Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long,ByVal wParam As Long, lParam As Any) As Long
       Private Const WM_SYSCOMMAND = &H112
       Private Const SC_MOVE = &HF010&
       Private Const HTCAPTION = 2
       Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       ReleaseCapture
       ret& = SendMessage(Me.hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
End Sub

Private Sub Form_Load()
Text1(0).Text = Winsock1.LocalHostName 必须添加winsock控件
Text1(1).Text = Winsock1.LocalIP 必须添加winsock控件
Text1(2).Text = Inet1.OpenURL("") 必须添加Inet控件
End Sub

 

其中依靠winsock控件,Inet控件

内网IP获取:在Delphi6以上的版本中,有一个IdIPWatch控件,它的功能就是检测网络在线状态和获取

IP地址。此控件在Indy Misc页面。用IDIPwatch1.LocalIP。当然也可以用Winsock,我们择便捷用。

可以这样写、procedure TForm1.IP1Click(Sender: TObject);
       showmessage(IDIPwatch1.LocalIP)

end;
但是showmessage没额外参数,不能改标题,我们换做messagebox也很简单:

procedure TForm1.IP1Click(Sender: TObject);
var
 Wnd:HWND;
begin
  Wnd:=application.Handle;
  messagebox(Wnd,PChar(IDIPwatch1.LocalIP),PChar(InSun),MB_OK);
end;

外网Ip获取:

Delphi中用TIdHTTP控件 ,在Indy Clients页面。

  示例:
       Memo1.Lines.Text   :=   IdHTTP.Get(URL);  

showmessage(IdHTTP1.Get(http://www.3322.org/dyndns/getip));

所以我们的代码是:
procedure TForm1.IP2Click(Sender: TObject);

var
 Wnd:HWND;
begin
  Wnd:=application.Handle;
  messagebox(Wnd,PChar(IdHTTP1.Get(http://www.3322.org/dyndns/getip)),PChar(InSun),MB_OK);
end;

其实我们用的就是第三方网页获取公网Ip的。

Delphi - InSun - InSuns PaRaDise

我们聪明的用了最简单的网页,而下面的网页是查询式的,势必用到字符串操作,有些复杂,大家可以研究下。

“刚才baidu了下,关于这个的,问的人倒是挺多,方法好像不是太多,1,找一个外网的机子配合,

得到本机的公网ip,2,通过三方网页获取,我就是用的2,其实很简单,get html代码,通过几个

字符串操作函数分析,得到所需信息。废话说完了,直接看代码。”
function pro_result(str:string):string ;//封装了成一个匹配的处理函数
var
i_0,i_1:Integer;
flag:Boolean;
str_1,temp_result:string;
begin
temp_result:=;
while Pos(查询结果,str)<>0 do
begin
i_1:=Pos(</span>,str);
i_0:=Pos(查询结果,str);
temp_result:=temp_result+Copy(str,i_0,i_1-i_0)+#13#10;
Delete(str,1,Pos(</span>,str));
end;
ReplaceString(temp_result,&nbsp;,,flag);
Result:=temp_result;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
temp,str_1:string;
i:Integer;
begin
Memo1.Text:=IdHTTP1.Get(http://www.ipseeker.cn);
temp:=Memo1.Text;
i:=Pos(查询结果,temp);
str_1:=Copy(temp,i,254);
str_2:=pro_result(str_1);
Memo2.Text:=str_2;
end;

当然ReplaceString函数要有定义。

我们把它们写在一起,我就不用皮肤了,也不写标题了,大家自己发挥。

如图:

Delphi - InSun - InSuns PaRaDise