看了标题,千万不要误会,其实说到底只是调用XP下的exe程序实现强制关机而已,并不是调用win32相关的api。自从老爸迷上了打麻将后,几乎天天出去打麻将赌钱,也是,一个人,无功无业,在家无所事事,难免想找点乐子。为了这事,我就专门买了一台电脑给他用了后,打麻将几乎没有了,到是天天对着电脑开初只是看股市炒权证,后来发展到会看网页,会找资料。星期1~5每天在线看股市也就算了,但是股市收盘后,包括星期6,7,其它时间都在上网看新闻,看文章,平均每天差不多有12小时在上网的。有那么好看吗?近期专家对“网瘾”的定义好像就是每天对电脑9个小时以上,看到老爸这样对着电脑,觉得专家将“网瘾”看成是精神病的一种真的很贴切,看来专家们真的是做到深入调研的。为了老爸的身体健康,觉得还是写一个强制关机的程序控制一下比较好,大不了打电话来问的时候就说中毒了。只要在xp启动的时候调用javaw去运行这个java程序,就可以无声无息了。
先看看xp下shutdown.exe的参数:
shutdown.exe -a 取消关机
shutdown.exe -f 强行关闭应用程序。
shutdown.exe -m \\计算机名 控制远程计算机。
shutdown.exe -i 显示图形用户界面,但必须是Shutdown的第一个参数。
shutdown.exe -l 注销当前用户。
shutdown.exe -r 关机并重启。
shutdown.exe -t时间 设置关机倒计时。
shutdown.exe -c"消息内容" 输入关机对话框中的消息内容(不能超127个字符)。
如果你想以倒计时的方式关机,可以输入“Shutdown.exe -s -t 3600”,这里表示60分钟后自动关机,“3600”代表60分钟。
如果想取消的话,可以在运行中输入“shutdown -a”。另外输入“shutdown -i”,则可以打开设置自动关机对话框,对自动关机进行设置。
虽然shutdown.exe是Windows XP下的程序,在Windows2000中是调用Windows下System中的Shell32.dll文件来实现关机的,例如“indir\RunDLL32.exe indir\System\Shell32.dll,SHExitWindowsEx 8”,但在Win2000也可利用它,方法如下:
在WinXP安装目录下的System32文件夹中找到Shutdown.exe,将它复制到Win2000安装目录下的System32文件夹中,在“运行”中输入“Shutdown.exe”,即可像在Windows XP中一样使用该程序了。
决定使用下面这名命令:Shutdown.exe -s -t 60 -c 今天开机时间超过9小时,长时间对着电脑有害健康,为了你的身体健康,电脑将会自动关机。
程序使用properties文件作配置,好方更修改的时候不用改代码重新编译。
看一下基本的类,
class MyProcess extends java.util.Properties implements java.lang.Runnable {
// ... 相关的省略,主要看一下在run中调用Shutdown.exe以实现强制关机 ...
MyProcess() {
config = new java.io.File( "config.properties" );
}
public void run() {
while ( true ) {
if( isMoreThen9Hours() ) {
String shutDownCommand = this.getProperty( "shutDownCommand" );
String shutDownMsg = this.getProperty( "shutDownMsg" );
Runtime r = Runtime.getRuntime();
r.exec(
shutDownCommand.concat(" ").concat( shutDownMsg )
);
}
try { Thread.currentThread().sleep( saveInterval ); } catch (InterruptedException e) {}
}
}
}