【原创源码】【Java】实现时间段强制关机, 还有玩手机时间控制软件推荐!坚持不熬夜
本帖最后由 小可爱~ 于 2019-9-23 14:45 编辑天天熬夜使用电脑, 身体一天不如一天
快过来, 我帮你戒掉这个坏习惯:lol, 不过觉得有更好方案的朋友, 希望能够分享出来给大家, 谢谢了{:1_893:}
来, 这是所有要用到的东西, 一个jar包, 一个脚本, 还有个脚本快捷方式
代码写的不好, 想要自己修改的, 给, 这是您的源码:
package com.zhazha;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author zhazha
* @version 1.0.0
* @date 2019/9/15 18:28
* @msg
**/
public class Demo {
private static Logger logger = LogManager.getLogger(Demo.class);
/**
* 至少保留两秒时间
*/
private static final String CMD = "shutdown -s -t 2 ";
private static final String PATH = "logs\\lastTime.txt";
/**
* 简单的自动关机
*/
// private static void simpleAutoShutdown() {
// Calendar calendar = Calendar.getInstance();
// int hour = calendar.get(Calendar.HOUR_OF_DAY);
// if (hour >= 0 && hour <= 5) {
// try {
// Runtime.getRuntime().exec(CMD);
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
private static void autoShutdown(String[] args) throws IOException {
if (null == args || args.length != 1) {
args = new String;
args = "0:30";
}
/**
* 检测上次关闭系统时间
*/
if (readLastOffSystemTime()) {
return;
}
String strCloseTime = args;
String[] split = strCloseTime.split(":");
if (split.length != 2 || "".equals(split) || "".equals(split)) {
logger.error("定时关机时间格式不对");
return;
}
logger.info("定时关机时间: " + split + " : " + split);
Calendar c1 = Calendar.getInstance();
Integer offHour = Integer.valueOf(split);
Integer offMinute = Integer.valueOf(split);
int hour = c1.get(Calendar.HOUR_OF_DAY);
int minute = c1.get(Calendar.MINUTE);
Calendar c2 = Calendar.getInstance();
if (offHour < hour) {
c2.add(Calendar.DAY_OF_MONTH, 1);
}
else if (offHour == hour && offMinute < minute) {
c2.add(Calendar.DAY_OF_MONTH, 1);
}
c2.set(Calendar.HOUR_OF_DAY, offHour);
c2.set(Calendar.MINUTE, offMinute);
long sub = c2.getTimeInMillis() - c1.getTimeInMillis();
logger.info("还有" + (sub / 1000 / 60) + "分钟关闭系统");
threadOffSystem(true, sub);
}
private static boolean readLastOffSystemTime() throws IOException {
/**
* 检测上次关机时间文档是否存在, 如果不存在则自动创建
*/
File file = new File(PATH);
if (!file.exists()) {
if (!file.createNewFile()) {
logger.error("文件创建失败, 请手动在程序运行目录下创建logs\\lastTime.txt文件夹和文档");
throw new IOException("文件创建失败, 请手动在程序运行目录下创建logs\\lastTime.txt文件夹和文档");
}
}
/**
* 读取上次关机时间
*/
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
try (bufferedReader) {
String lastTime = bufferedReader.readLine();
// 检测关机格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lastTimeMis = sdf.parse(lastTime).getTime();
long curTimeMis = new Date().getTime();
long flag = curTimeMis - lastTimeMis;
if (flag <= (5 * 60 * 60 * 1000)) {
threadOffSystem(false, 0);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 线程关机
*
* @param flag
* true 正常线程关机,false 文件读取关机, 不需要重写最后关机时间
* @param minute
* 多少秒关机
*/
private static void threadOffSystem(boolean flag, long minute) {
System.out.println("关机");
new Timer().schedule(new TimerTask() {
public void run() {
BufferedWriter writer = null;
try {
Runtime.getRuntime().exec(CMD);
if (flag) {
writer = new BufferedWriter(new FileWriter(PATH));
writer.write(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
} catch (Exception e) {
e.printStackTrace();
logger.error("关闭系统失败");
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.exit(0);
}
}, minute);
}
/**
* 输入格式 1:1
*
* @param args
*/
public static void main(String[] args) throws IOException {
autoShutdown(args);
// simpleAutoShutdown();
}
}
来, 这是vbs脚本(至于为啥不用 cmd 是因为开机的时候程序启动比较多, 所以cmd启动窗口会很慢, 有机会把 cmd 关掉, 当然隐藏也行, 随你 :victory:)
Set ws = CreateObject("Wscript.Shell")
ws.run "AutoShutdown.jar 1:0",vbhide
好, 源码就这么简单, 剩下的都是电脑上的操作了
第一步: 打开vbs脚本文件看到下面的这行代码, 里面的 1:0 就是关机时间, 你要改啥就该啥, 不过必须是合理的时间, 如 00:30 , 别给我整个 25:61 分 哈
不过可能会有一分钟的延迟哦~~~
ws.run "AutoShutdown.jar 1:0",vbhide
为啥不用计算机管理器里面的任务计划功能, 因为我懒~~~;www
第二步: 把编译好的windows可直接运行的jar包和vbs脚本放在相同的目录下
第三步: 直接给他丢到启动选里面(我win7, 启动目录: C:\Users\XXXX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)
第四步: 重启电脑看下, jar包所在的目录下面是不是多了个文件, 看下里面的内容, 就知道成功没
来, 这是项目的源码和编译后的jar程序(程序在out文件夹中):
链接:https://pan.baidu.com/s/1l5byOCwhrZeLQF9Ow0OYHA
提取码:7jyg
哦, 对了, 还有一款定时段控制手机的软件不错, 只要时间一到, 软件就把手机锁住咯, 直到你设置的结束时间
当然白名单内的app可以自己设置, 一个月有三次取消锁机的机会~~~
番茄TODO, (这是我从360手机助手下载来的哦, 不知道安全不, 所以记住这个图标自己去手机上查找吧~~~):handshake
链接:https://pan.baidu.com/s/1TVPLicIQpsCenj9RkY0ufQ
提取码:zq9k
老板, 电脑关机了, 是电脑自己动的手, 我没按~~~可以下班了么???
doufan 发表于 2019-9-16 00:39
我还是控制不住,最好是把电网还是电信之类的给搞停了
emmm, 还是身体重要, 睡前一个小时, 就不要碰电脑和手机, 去运动运动, 做做仰卧起坐之类的运行, 把自己整累了, 就控制住了{:1_901:} 小可爱~ 发表于 2019-9-16 00:44
emmm, 还是身体重要, 睡前一个小时, 就不要碰电脑和手机, 去运动运动, 做做仰卧起坐之类的运行, 把自己整 ...
厉害,我也喜欢那样的作息,但是有的时候就是控制不住 6666666666 java实现这个功能,确实有点大材小用了。略显繁琐 Crazy开发仔 发表于 2019-9-16 00:33
java实现这个功能,确实有点大材小用了。略显繁琐
哈哈, 是的, 手头没c/c++编译器;www 我还是控制不住,最好是把电网还是电信之类的给搞停了{:1_909:} 小孩就是闹钟⏰ 感谢分享 厉害了,感谢
页:
[1]
2