'use strict'; /** * 前端(html)调用electron功能时,建议使用该模块 * * 定义的function 接收三个参数 * @param event ipcMain事件对象 * @param channel 频道 * @param arg 接收到的消息 */ const {app, dialog, BrowserWindow, BrowserView, Notification, powerMonitor, screen, nativeTheme} = require('electron'); const path = require('path'); const _ = require('lodash'); let myTimer = null; let browserViewObj = null; let notificationObj = null; exports.hello = function (event, channel, msg) { let newMsg = msg + " +1" let reply = '' reply = '收到:' + msg + ',返回:' + newMsg return reply } exports.messageShow = function (event, channel, arg) { dialog.showMessageBoxSync({ type: 'info', // "none", "info", "error", "question" 或者 "warning" title: '自定义标题-message', message: '自定义消息内容', detail: '其它的额外信息' }) return '打开了消息框'; } exports.messageShowConfirm = function (event, channel, arg) { const res = dialog.showMessageBoxSync({ type: 'info', title: '自定义标题-message', message: '自定义消息内容', detail: '其它的额外信息', cancelId: 1, // 用于取消对话框的按钮的索引 defaultId: 0, // 设置默认选中的按钮 buttons: ['确认', '取消'], // 按钮及索引 }) let data = (res === 0) ? '点击确认按钮' : '点击取消按钮'; console.log('[electron] [ipc] [example] [messageShowConfirm] 结果:', res); return data; } /** * 长消息 - 开始 */ exports.socketMessageStart = function (event, channel, arg) { // 每隔1秒,向前端页面发送消息 // 用定时器模拟 myTimer = setInterval(function(e, c, msg) { let timeNow = Date.now(); let data = msg + ':' + timeNow; e.reply(`${c}`, data) }, 1000, event, channel, arg) return '开始了' } /** * 长消息 - 停止 */ exports.socketMessageStop = function () { clearInterval(myTimer); return '停止了' } /** * 加载视图内容 */ exports.loadViewContent = function (event, channel, arg) { let content = null; if (arg.type == 'html') { content = path.join('file://', app.getAppPath(), arg.content) } else { content = arg.content; } browserViewObj = new BrowserView(); MAIN_WINDOW.setBrowserView(browserViewObj) browserViewObj.setBounds({ x: 300, y: 170, width: 650, height: 400 }); browserViewObj.webContents.loadURL(content); return true } /** * 移除视图内容 */ exports.removeViewContent = function () { MAIN_WINDOW.removeBrowserView(browserViewObj); return true } /** * 打开新窗口 */ exports.createWindow = function (event, channel, arg) { let content = null; if (arg.type == 'html') { content = path.join('file://', app.getAppPath(), arg.content) } else { content = arg.content; } let winObj = new BrowserWindow({ x: 10, y: 10, width: 980, height: 650 }) winObj.loadURL(content); return winObj.id } /** * 创建系统通知 */ exports.sendNotification = function (event, channel, arg) { if (!Notification.isSupported()) { return '当前系统不支持通知'; } let options = {}; if (!_.isEmpty(arg.title)) { options.title = arg.title; } if (!_.isEmpty(arg.subtitle)) { options.subtitle = arg.subtitle; } if (!_.isEmpty(arg.body)) { options.body = arg.body; } if (!_.isEmpty(arg.silent)) { options.silent = arg.silent; } notificationObj = new Notification(options); if (arg.clickEvent) { notificationObj.on('click', (e) => { let data = { type: 'click', msg: '您点击了通知消息' } event.reply(`${channel}`, data) }); } if (arg.closeEvent) { notificationObj.on('close', (e) => { let data = { type: 'close', msg: '您关闭了通知消息' } event.reply(`${channel}`, data) }); } notificationObj.show(); return true } /** * 电源监控 */ exports.initPowerMonitor = function (event, channel, arg) { powerMonitor.on('on-ac', (e) => { let data = { type: 'on-ac', msg: '接入了电源' } event.reply(`${channel}`, data) }); powerMonitor.on('on-battery', (e) => { let data = { type: 'on-battery', msg: '使用电池中' } event.reply(`${channel}`, data) }); powerMonitor.on('lock-screen', (e) => { let data = { type: 'lock-screen', msg: '锁屏了' } event.reply(`${channel}`, data) }); powerMonitor.on('unlock-screen', (e) => { let data = { type: 'unlock-screen', msg: '解锁了' } event.reply(`${channel}`, data) }); return true } /** * 获取屏幕信息 */ exports.getScreen = function (event, channel, arg) { let data = []; let res = {}; if (arg == 0) { let res = screen.getCursorScreenPoint(); data = [ { title: '横坐标', desc: res.x }, { title: '纵坐标', desc: res.y }, ] return data; } if (arg == 1) { res = screen.getPrimaryDisplay(); } if (arg == 2) { let resArr = screen.getAllDisplays(); // 数组,只取一个吧 res = resArr[0]; } // console.log('[electron] [ipc] [example] [getScreen] res:', res); data = [ { title: '分辨率', desc: res.bounds.width + ' x ' + res.bounds.height }, { title: '单色显示器', desc: res.monochrome ? '是' : '否' }, { title: '色深', desc: res. colorDepth }, { title: '色域', desc: res.colorSpace }, { title: 'scaleFactor', desc: res.scaleFactor }, { title: '加速器', desc: res.accelerometerSupport }, { title: '触控', desc: res.touchSupport == 'unknown' ? '不支持' : '支持' }, ] return data; } /** * 获取系统主题 */ exports.getTheme = function (event, channel, arg) { let theme = 'system'; if (nativeTheme.shouldUseHighContrastColors) { theme = 'light'; } else if (nativeTheme.shouldUseInvertedColorScheme) { theme = 'dark'; } return theme; } /** * 设置系统主题 */ exports.setTheme = function (event, channel, arg) { // TODO 好像没有什么明显效果 nativeTheme.themeSource = arg; return arg; }