好友
阅读权限25
听众
最后登录1970-1-1
|
小可爱~
发表于 2019-9-16 00:20
本帖最后由 小可爱~ 于 2019-9-23 14:45 编辑
快过来, 我帮你戒掉这个坏习惯, 不过觉得有更好方案的朋友, 希望能够分享出来给大家, 谢谢了
来, 这是所有要用到的东西, 一个jar包, 一个脚本, 还有个脚本快捷方式
代码写的不好, 想要自己修改的, 给, 这是您的源码:
[Java] 纯文本查看 复制代码 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[1];
args[0] = "0:30";
}
/**
* 检测上次关闭系统时间
*/
if (readLastOffSystemTime()) {
return;
}
String strCloseTime = args[0];
String[] split = strCloseTime.split(":");
if (split.length != 2 || "".equals(split[0]) || "".equals(split[1])) {
logger.error("定时关机时间格式不对");
return;
}
logger.info("定时关机时间: " + split[0] + " : " + split[1]);
Calendar c1 = Calendar.getInstance();
Integer offHour = Integer.valueOf(split[0]);
Integer offMinute = Integer.valueOf(split[1]);
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 关掉, 当然隐藏也行, 随你 )
[Asm] 纯文本查看 复制代码 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
为啥不用计算机管理器里面的 任务计划 功能, 因为我懒~~~
第二步: 把编译好的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手机助手下载来的哦, 不知道安全不, 所以记住这个图标自己去手机上查找吧~~~)
链接:https://pan.baidu.com/s/1TVPLicIQpsCenj9RkY0ufQ
提取码:zq9k
老板, 电脑关机了, 是电脑自己动的手, 我没按~~~可以下班了么???
|
免费评分
-
参与人数 2 | 吾爱币 +3 |
热心值 +2 |
收起
理由
|
追逐太阳
| |
+ 1 |
看到你的标题给个赞,但是使用番茄就足够了,没有必要那么麻烦 |
苏紫方璇
| + 3 |
+ 1 |
感谢发布原创作品,吾爱破解论坛因你更精彩! |
查看全部评分
|