Delphi实现随时随刻知道自己的IP

2016-01-29 14:13 19 1 收藏

Delphi实现随时随刻知道自己的IP,Delphi实现随时随刻知道自己的IP

【 tulaoshi.com - Delphi 】

 
随时随刻知道自己的IP

  随着网络的普及,越来越多的人开始过起了网络生涯。网站让你目不暇接,可是有的网站却专门钻IE的空子,当你浏览了它的主页之后,注册表就会被禁止,还会修改你的其他设置,真是害人不浅。还有一招更毒的,你浏览它的主页后,它会下载一个拨号器在你的硬盘,拨号器会断开你当前的连接去拨别的号(想一想,拨一个长途国际电话,一小时多少钱?!),所以,我们这些拨号上网的用户需要一个能随时监测自己IP地址的软件,当IP发生改变时,它会自动的报警;同时,它还应该是透明的,这样即使运行时总在最前面,也不会影响别的窗体。

  废话不多说了,马上开工。首先打开Delphi新建一个工程,添加一个定时器Timer1、一个标签Label1、一个PopupMenu1,并且为PopupMenu1添加一个Exit菜单项。下面就是全部的源代码:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls, Winsock; //首先要添加winsock
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
PopupMenu1: TPopupMenu;
Exit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ExitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
oldx,oldy: integer;//添加变量,用做移动窗体
oldIp: string;
implementation
{$R *.dfm}
//下面就是关键所在了
function LIP : 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:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Label1 do //定义属性
begin
Caption:='';
Font.Charset:=ANSI_CHARSET;
Font.Name:='Arial';
Font.Size:=10;
Font.Color:=clRed;
Align:=alClient;
PopupMenu:=popupmenu1;
end;

Timer1.Interval:=1000;
Timer1.Enabled:=true;
Label1.Caption:='IP:'+LIP; //赋值,把Ip赋值给label1
oldIp:=LIP;
BorderStyle:=bsNone;
Alphablend:=true; //呵呵,这个就是让窗口变透明的办法了
Alphablendvalue:=100;
FormStyle:=fsStayOnTop; //让窗体总在最前面
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption :='IP:'+LIP;
if oldip < LIP then
Showmessage('IP地址已经改变,请检查!');//提醒用户
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssleft in shift then //移动窗体Form1
begin
Form1.Left:=Form1.Left+x-oldx;
Form1.Top:=Form1.top+y-oldy;
end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
oldx:=x;
oldy:=y;
end;

procedure TForm1.ExitClick(Sender: TObject);
begin
Close;
end;
end.


  程序比较简单,我只想再说说透明窗体。使窗体透明的方法有好几种,其中一种是我用的这种,方法比较简单。还有一种是调用API函数SetLayeredWindowAttributes,它有4个参数,分别是hwnd、crKey、bAlpha和dwFlags。hwnd指操作的窗口的句柄,crKey是指定要透明的颜色值,是和第四个参数配合使用的(当第四个参数为LWA_COLORKEY),bAlpha是透明参数,当bAlpha为0时窗口全透明,当值为255时为正常的窗口。比如要Form1透明的话,相应的语句是SetLayeredWindowAttributes(form1.Handle, 0, 100, LWA_ALPHA),不过这个API只能在Win2000下用,不支持Win98。

本程序在Delphi6.0+Win2000下调试通过。
源程序下载地址: http://www.cfan.net.cn/qikan/cxg/0203sss.zip

来源:https://www.tulaoshi.com/n/20160129/1492799.html

延伸阅读
当你做一个多媒体播放器时,难免少不了控制音量的大小和左右声道的播放,下面就介绍一种控制Wave波形输出设备音量的方法,该方法不是设置主音量。先在窗体上放两个TTrackBar,分别命名为TrackBar1,TrackBar2,属性Max都设置为65535,如果觉得刻度太密了,可以把Frequency属性值设置大一些,然后在Uses段加入MMSystem,并在TrackBar1和Trac...
标签: Delphi
  文件关联为我们带来很多的方便。Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容。 Function GetAssociatedExec(FileExt: String; var FileDescription, MIMEType: String): String; Var Reg: TRegistry; FileType: String; begin Result := ′′;{函数返回值是打开Fi...
  Delphi中正常窗口的实现 摘要 在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口。而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平铺等显得有些畸形的问题。本文通过对VCL的深入分析,给出了一个只需要对应用程序项目文件作3行代码的修改就能解...
标签: windows 操作系统
在正式进行各种“黑客行为”之前,黑客会采取各种手段,探测(也可以说“侦察”)对方的主机信息,以便决定使用何种最有效的方法达到自己的目的。来看看黑客是如何获知最基本的网络信息——对方的IP地址;以及用户如何防范自己的IP泄漏。 获取IP “IP”作为Net用户的重要标示,是黑客首先需要了解的。获取的方法较多,黑客也...
标签: 女人 女人养生
女人要随时了解自己身体 有人生孩子之前痛经,生完孩子照样痛经。这样的人下一个目标等着自己,中国女性最大的疾病---子宫肌瘤。在东北地区发病率高达90%左右。 很多人拿它不当回子事儿。等到医院的时候,只要有子宫肌瘤,现在的医院很简单问她结婚了吗?生孩子了吗?生了,好了,割了吧。摘除了以后你知道意味着什...

经验教程

864

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部