吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4409|回复: 13
收起左侧

[Java 原创] 【原创源码】【Java】实现时间段强制关机, 还有玩手机时间控制软件推荐!坚持不熬夜

[复制链接]
小可爱~ 发表于 2019-9-16 00:20
本帖最后由 小可爱~ 于 2019-9-23 14:45 编辑
天天熬夜使用电脑, 身体一天不如一天

9150e4e5ly1fcs78hqdx8j203p04p3yu.jpg

9150e4e5ly1fcycxpy2s6j208c06a3yq.jpg
快过来, 我帮你戒掉这个坏习惯, 不过觉得有更好方案的朋友, 希望能够分享出来给大家, 谢谢了
来, 这是所有要用到的东西, 一个jar包, 一个脚本, 还有个脚本快捷方式

123456.jpg


代码写的不好, 想要自己修改的, 给, 这是您的源码:

[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脚本放在相同的目录下

1.jpg

第三步: 直接给他丢到启动选里面(我win7, 启动目录: C:\Users\XXXX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)

2.jpg


第四步: 重启电脑看下, jar包所在的目录下面是不是多了个文件, 看下里面的内容, 就知道成功没

3.jpg


来, 这是项目的源码和编译后的jar程序(程序在out文件夹中):
链接:
https://pan.baidu.com/s/1l5byOCwhrZeLQF9Ow0OYHA

提取码:7jyg

哦, 对了, 还有一款定时段控制手机的软件不错, 只要时间一到, 软件就把手机锁住咯, 直到你设置的结束时间
当然白名单内的app可以自己设置, 一个月有三次取消锁机的机会~~~
番茄TODO, (这是我从360手机助手下载来的哦, 不知道安全不, 所以记住这个图标自己去手机上查找吧~~~)
dsad.jpg
链接:https://pan.baidu.com/s/1TVPLicIQpsCenj9RkY0ufQ
提取码:zq9k

老板, 电脑关机了, 是电脑自己动的手, 我没按~~~可以下班了么???  
    6af89bc8gw1f8ns3hre9rg203m02p3yl.gif

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
追逐太阳 + 1 看到你的标题给个赞,但是使用番茄就足够了,没有必要那么麻烦
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 小可爱~ 发表于 2019-9-16 00:44
doufan 发表于 2019-9-16 00:39
我还是控制不住,最好是把电网还是电信之类的给搞停了

emmm, 还是身体重要, 睡前一个小时, 就不要碰电脑和手机, 去运动运动, 做做仰卧起坐之类的运行, 把自己整累了, 就控制住了
追逐太阳 发表于 2019-9-17 09:09
小可爱~ 发表于 2019-9-16 00:44
emmm, 还是身体重要, 睡前一个小时, 就不要碰电脑和手机, 去运动运动, 做做仰卧起坐之类的运行, 把自己整 ...

厉害,我也喜欢那样的作息,但是有的时候就是控制不住
睡梦成瘾 发表于 2019-9-16 00:29
Crazy开发仔 发表于 2019-9-16 00:33
java实现这个功能,确实有点大材小用了。略显繁琐
 楼主| 小可爱~ 发表于 2019-9-16 00:38
Crazy开发仔 发表于 2019-9-16 00:33
java实现这个功能,确实有点大材小用了。略显繁琐

哈哈, 是的, 手头没c/c++编译器
doufan 发表于 2019-9-16 00:39
我还是控制不住,最好是把电网还是电信之类的给搞停了
A陈尘 发表于 2019-9-16 07:31
小孩就是闹钟&#9200;
ZHISHANCHUNGYI 发表于 2019-9-16 07:37
感谢分享
头像被屏蔽
zaijiankelu 发表于 2019-9-16 13:48
提示: 作者被禁止或删除 内容自动屏蔽
凌乱的思绪 发表于 2019-9-16 13:51
厉害了,感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 15:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表