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);
}
相关推荐
anOnion6 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
这是个栗子6 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun7 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript
摇滚侠8 小时前
方法 A 等方法 B 执行完再执行 叫同步调用还是异步调用 JS 默认是同步调用还是异步调用
开发语言·javascript·ecmascript
触底反弹9 小时前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法
触底反弹9 小时前
AI Tool Use 深度解析:大模型是如何"突破物理限制"调用外部工具的?
javascript·人工智能·后端
竹林8189 小时前
从 RPC 超时到批量签名:我用 @solana/web3.js 重构了一个 NFT 铸造页面,踩了这些坑
前端·javascript
优雅格子衫10 小时前
TypeScript 类的基本使用小结
javascript·ubuntu·typescript
橘子星10 小时前
从零手写 RAG 语义检索:基于 Node.js 实现轻量级向量搜索
javascript·人工智能
林希_Rachel_傻希希10 小时前
web性能优化之————图片效果
前端·javascript·面试