electron实现定时关机和提醒

electron实现定时关机和提醒

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

  1. 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中进行监听。
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()调用主进程方法。
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);
}
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值