用Delphi编写的一个上网助手

来源:互联网 发布:cdrx4官方软件下载 编辑:程序博客网 时间:2024/05/16 11:21

======================================================
注:本文源代码点此下载
======================================================

自从家里的电信宽带由包年换成所谓的套餐之后,每月的上网时间就必须要控制在150小时以内,于是乎被迫将无线路由器由自动上网改成手动上网。每次上网必须要先打开路由器控制页面,再用excel计时,对于我这样出类拔萃的懒人来说,不免有些嫌烦。好容易乘工作之闲,再次写了一个上网助手,直接控制无线路由器的连接和断线,同时自动进行计时,用起来果然方便许多。

上面是程序运行时的界面,图中可以看到每天的上网总时间,以及每次连接和断线的时间;还能一并看到余下每天可用的平均上网时间。程序可以最小化到托盘,允许直接在trayicon的弹出菜单上进行连接和断线操作。

以下从代码说明此程序的核心功能部分:

const basicurl = 'http://192.168.1.1/';

const connecturl = 'http://192.168.1.1/userrpm/statusrpm.htm?connect=连%20接&wan=1';

const disconnecturl = 'http://192.168.1.1/userrpm/statusrpm.htm?disconnect=断%20线&wan=1';

这三行是tp-link无线路由器的基本设定url。

procedure tmainform.initializerouter;

begin

idhttp1.request.accept := 'image/gif, image/x-xbitmap, image/jpeg, ' +

'image/pjpeg, application/x-shockwave-flash, ' +

'application/vnd.ms-powerpoint, application/vnd.ms-excel, ' +

'application/msword, */*';

idhttp1.request.referer := 'http://192.168.1.1/';

idhttp1.request.host := '192.168.1.1';

idhttp1.request.acceptlanguage := 'zh-cn';

idhttp1.request.acceptencoding := 'gzip,deflate';

idhttp1.request.useragent := 'mozilla/4.0(compatible;msie 6.0;windows nt 5.2;)';

idhttp1.request.connection := 'keep-alive';

idhttp1.request.password := '******';

idhttp1.request.username := 'sunwaywei';

end;

这个函数是初始化路由器连接。程序使用idhttp组件来向路由器发送http请求,函数中对请求的参数配置进行了基本设定。

procedure tmainform.doconnect;

begin

idhttp1.get(basicurl);

idhttp1.get(connecturl);

fonline := true;

fonlinefrom := now;

end;

procedure tmainform.dodisconnect;

begin

idhttp1.get(basicurl);

idhttp1.get(disconnecturl);

fonline := false;

dbmodule.insertnewtimerec(fonlinefrom, now);

filldatelist;

getstatistics;

updatestatistics;

end;

以上两个函数控制路由器进行连接或是断线。在开发这里的时候,我发现很奇怪的现象,即在访问connecturl或是disconnecturl之前,必须先访问一次basicurl,这样操作才能够成功。很奇怪,我也不理解为何会如此。总之是这样一做之后,就ok了。

上网计时部分对于有一些编程经验的人来说,应当是不太难的。从dodisconnect函数中可以看到,当断线的时候,把本次上网时间插入数据库即可。至于按日期分类显示什么的功能,只要理清数据关系,也没什么难度。以下给出我所使用的几个sql语句,供有兴趣的人参考或是批评指正。

const sqlgetdatelist =

'select datevalue(fromtime) as [date],' +

'sum(datediff("n", fromtime, totime)+1) as totaltime ' +

'from timerec ' +

'where fromtime >= dateserial(year(now),month(now),1) ' +

'group by datevalue(fromtime) ' +

'order by datevalue(fromtime) desc';

const sqltotalminutes =

'select sum(datediff("n", fromtime, totime)+1) as totaltime ' +

' from timerec where fromtime >= dateserial(year(now),month(now),1)';

const sqltodayminutes =

'select sum(datediff("n", fromtime, totime)+1) as totaltime ' +

' from timerec where fromtime >= dateserial(year(now),month(now),day(now))';

说明一下,我使用的是access数据库,所以sql语句中使用的access函数。使用sql server的话还是需要修改的。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击