差不多半个月前,在网上看到一篇文章,介绍了如何用MATLAB实现发一条微博来关机的功能。仔细一点说来,就是要实现这样一个功能:只要我的MATLAB的这个M文件正在运行,那么当我在自己微博上发布“关机”命令的时候,电脑便会关机。看了人家的思路之后,不由得赞叹他人的创意。下面我先把这段代码贴出来:
cmd="关机";
counter=0;
r=[];
%登入微博后,在 http://app.weibo.com/tool/weiboshow 页面最下方找到src链接
src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2022255405&verifier=f0469716&dpc=1';
while 1
try
s=urlread(src);
r=regexp(s,cmd,'match');
catch
disp('网络连接问题');
end
if ~isempty(r)
disp('呵呵!!!!!收到待机指令');
%%关机
!shutdown -s -t 0
break;
else
clc
counter=counter+1;
disp(['没有收到关闭指令+' num2str(counter)]);
end
pause(5);
end
分析这段代码,我们可以很容易地知道作者的思路:
在运行M文件之后,程序便不断查询src这个字符串所代表的页面,将其上的HTML作为字符串传到s变量里面,然后我们利用regexp函数查看这段HTML代码里面有没有我们预定好的“关机指令”,也就是cmd所代表的字符串。如果有的话,调用DOS命令进行关机,如果没有就返回继续读取页面内容。可以说,思路是很简单的。
但是如果真的使用的时候,问题不可避免的来了。那就是如果我先前发送过“关机”指令,那么“关机”这两个字就会存在src页面HTML中,所以这段程序“只能用一次”。。。为了解决这个问题,我们只好在运行程序前,先删除自己微博中原来所有带有“关机”字眼的微博,这显然是不好的,所以我想到是不是可以给它加上关机时间的限制呢?
就像下面这样来实现关机:
这样做我们只需要给代码很小的改动,只需要添加判别“关机指令”是否为合法的格式,关机指令后的“时间”是否为未来的某一时间即可。到了这个时间,我们再调用DOS命令进行关机操作。所以,我补充了下面的代码:
cmd='关机';
counter=0;
r=[];
%登入微博后,在 http://app.weibo.com/tool/weiboshow 页面最下方找到src链接
%src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&
%fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2022255405&verifier=f0469716&dpc=1';
src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2629935075&verifier=5970ebca&dpc=1';
while 1
try
s=urlread(src);
s
r=regexp(s,cmd,'match');
catch
disp('网络连接问题');
end
if ~isempty(r)
[startIndex,endIndex]=regexp(s,cmd);
nowdate=datestr(now,26);
nowhourmin=datestr(now,15);
time=s(endIndex+1:endIndex+16);
time
nowhourmin
date=time(1:10);
hourmin=time(12:16);
if strcmp(date,nowdate)&&strcmp(hourmin,nowhourmin)
disp('呵呵!!!!!收到待机指令');
save;
!shutdown -s -t 0
break;
else
counter=counter+1;
disp(['时间不对+' num2str(counter)]);
end
%%关机
!shutdown -s -t 0
else
counter=counter+1;
disp(['没有收到关闭指令+' num2str(counter)]);
end
pause(0.5);
end
这样就可以在给定的时间关闭计算机了~~~不过使用时候要注意指令格式一定要正确:关机2013/09/12 09:34