electron实现定时关机和提醒

electron实现定时关机和提醒

做个定时关机和提醒的小练习。

  1. html部分
html 复制代码
<body>
    <form id="myForm">
      <label for="shutdowntime">设置定时关机时间:</label>
      <input type="time" id="shutdowntime" value="18:00" name="shutdowntime">
      <input type="button" id="myButton" click="startTime()" value="开始生效">
    </form>
    <p id="remainTime"></p>
    <script src="renderer.js"></script>
  </body>
  1. main.js里引入提醒和主进程,在ready中进行监听。
javascript 复制代码
const { app, BrowserWindow,ipcMain,Notification } = require('electron')
const NOTIFICATION_TITLE = '提醒'
const NOTIFICATION_BODY = '还有10分钟即将关闭电脑,请保存数据。'
app.whenReady().then(() => {
  //其他方法省略
  ipcMain.on('shutdown', () => {
    exec('shutdown -s', (err, stdout, stderr) => {
      if (err) {
        console.error(`执行出错: ${err}`);
        return;
      }
      console.log(`标准输出: ${stdout}`);
      console.error(`标准错误: ${stderr}`);
    });
  });

  ipcMain.on('notice', () => {
    new Notification({ title: NOTIFICATION_TITLE, body: NOTIFICATION_BODY 				  }).show()
  });
})
  1. renderer.js引入ipcRenderer进程,通过ipcRenderer.send()调用主进程方法。
javascript 复制代码
const { ipcRenderer } = require('electron');

var shutdowntime;
//计时,并处理提醒和关机
function displayTime() {
  const now = new Date();
  let startTime =now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds()
  let endTime = shutdowntime+':00';
  let remainingTime = calculateTimeDifference(startTime, endTime);
  var remainTime = "距离关机时间: " + remainingTime;
  document.getElementById("remainTime").innerHTML = remainTime;

  //到时间提醒
  if(remainingTime==='00:10:00'){
    ipcRenderer.send('notice'); 
  }
  //到时间关机
  if(remainingTime==='00:01:00'){
    ipcRenderer.send('shutdown'); 
  }
}

//监听设置的事件
document.addEventListener('DOMContentLoaded', function() {
  var button = document.getElementById('myButton');
  button.addEventListener('click', function() {
    // 设置定时器,每秒调用一次displayTime函数
    var form = document.getElementById('myForm');
    shutdowntime = form.elements['shutdowntime'].value;
    setInterval(displayTime, 1000);
  });
});

//计算时间差
function calculateTimeDifference(startTime, endTime) {
  function toMilliseconds(timeString) {
    let parts = timeString.split(':');
    let milliseconds = Number(parts[0]) * 3600000 + 
                       Number(parts[1]) * 60000 + 
                       Number(parts[2]) * 1000; 
    return milliseconds;
  }

  function toTimeString(milliseconds) {
    let hours = Math.floor(milliseconds / 3600000);
    let minutes = Math.floor((milliseconds % 3600000) / 60000);
    let seconds = Math.floor((milliseconds % 60000) / 1000);
    return hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0');
  }

  let startMillis = toMilliseconds(startTime);
  let endMillis = toMilliseconds(endTime);
  let differenceMillis = Math.abs(endMillis - startMillis); 

  return toTimeString(differenceMillis);
}
相关推荐
志尊宝7 分钟前
Vue3 零基础每日笔记(017):事件处理进阶——$event、多事件与事件修饰符全家桶
javascript·vue.js·笔记
光影少年28 分钟前
react navite浏览器 Event Loop 和 Node Event Loop 的区别
前端·javascript·react native·react.js·前端框架
bug总结13 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言14 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
2601_9623824315 小时前
剑指大前端全栈工程师(全2册)主要情节
javascript·实战案例·全栈工程师·剑指大前端·html5+css3
泯泷15 小时前
手搓JSVM第 12 篇:完整最小 JSVM 实现与源码设计复盘
前端·javascript·前端框架
默_笙15 小时前
🍔 给 AI 发一张结构化表格(下):从"自由发挥"到"按格填空"的输出驯服指南
前端·javascript
泯泷15 小时前
手搓JSVM第 11 篇:打包、模块与 CLI:把 VM 产物变成可运行文件
前端·javascript·前端框架
泯泷15 小时前
手搓JSVM第 10 篇:对象、数组与属性访问
前端·javascript·前端框架
泯泷16 小时前
手搓JSVM第 9 篇:闭包:函数如何记住外部变量
前端·javascript·前端框架