| | |
| | | import { app, BrowserWindow, shell, ipcMain } from 'electron' |
| | | import { app, BrowserWindow, shell, ipcMain,Menu, IpcMainEvent } from 'electron' |
| | | import { release } from 'os' |
| | | import { join } from 'path' |
| | | import fs from 'fs' |
| | | import iconv from 'iconv-lite' |
| | | import logger from '../preload/logger.js' |
| | | //koa---- |
| | | import Koa from 'koa'; |
| | | import Router from 'koa-router'; |
| | | import { checkUpdate } from './appVersion.js'; |
| | | const koaBody = require('koa-body'); |
| | | const creatorKoa=(win)=>{ |
| | | const app = new Koa(); |
| | | const router = new Router(); |
| | | app.use(koaBody({ |
| | | multipart: true |
| | | })); |
| | | |
| | | router.get('/', async (ctx) => { |
| | | ctx.body = 'Hello World!'; |
| | | }); |
| | | router.post('/postResult', async (ctx)=>{ |
| | | const body=ctx.request.body |
| | | win?.webContents.send('message-koa',body) |
| | | ctx.body={ |
| | | "code": 200, |
| | | "data": body, |
| | | "message": "接收成功" |
| | | } |
| | | }) |
| | | |
| | | app.use(router.routes()); |
| | | |
| | | app.listen(3131,()=>{ |
| | | console.log('koa Service start, port:3131') |
| | | }); |
| | | } |
| | | |
| | | // 配制文件的读写实例 |
| | | const Store = require('electron-store'); |
| | | const store = new Store(); |
| | | console.log(store.path) |
| | | // 读 |
| | | // console.log(store.get('clientCode')) |
| | | // console.log(store.get('deviceList')) |
| | | // 写 |
| | | // store.set("testr","test001") |
| | | |
| | | |
| | | // Disable GPU Acceleration for Windows 7 |
| | | if (release().startsWith('6.1')) app.disableHardwareAcceleration() |
| | |
| | | const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}` |
| | | |
| | | async function createWindow() { |
| | | |
| | | win = new BrowserWindow({ |
| | | title: 'Main window', |
| | | transparent: true, |
| | | frame:store.get('debug')===undefined?true:store.get('debug'),//关闭菜单栏 |
| | | fullscreen: true,// 开启默认全屏 |
| | | kiosk: true, |
| | | movable:false,// 关闭窗口移动 |
| | | resizable: false, // 禁止调整窗口大小 |
| | | // autoHideMenuBar:store.get('debug'), |
| | | webPreferences: { |
| | | preload: splash, |
| | | nodeIntegration: true, |
| | |
| | | // Test active push message to Renderer-process |
| | | // 测试推送消息到Renderer进程 |
| | | win.webContents.on('did-finish-load', () => { |
| | | win?.webContents.send('main-process-message', new Date().toLocaleString()) |
| | | win?.webContents.send('getConfigData',store.get('clientCode'),store.get('deviceList')) |
| | | creatorKoa(win) |
| | | win?.webContents.send('getScreenTimeout',store.get('screenTimeout')) |
| | | win?.webContents.send('getPcName',store.get('machineName')) |
| | | win?.webContents.send('getConfigData',store.get(),store.path) |
| | | }) |
| | | |
| | | // Make all links open with the browser, not with the application |
| | |
| | | return { action: 'deny' } |
| | | }) |
| | | } |
| | | |
| | | app.whenReady().then(createWindow) |
| | | |
| | | app.on('window-all-closed', () => { |
| | |
| | | if (process.platform !== 'darwin') app.quit() |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | app.on('second-instance', () => { |
| | | if (win) { |
| | | // Focus on the main window if the user tried to open another |
| | | // 如果用户试图打开另一个窗口,则将焦点放在主窗口上 |
| | | if (win.isMinimized()) win.restore() |
| | | win.focus() |
| | | } |
| | | }) |
| | | app.on('render-process-gone',(e,w,d)=>{ |
| | | logger.info(`${new Date()}渲染进程被杀死${d.reason}\n`) |
| | | // 基于我在开发的程序本身的设定,此处重启应用就可以了 |
| | | app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])}); |
| | | // 尝试关闭所有窗口 |
| | | app.quit(); |
| | | }) |
| | | |
| | | |
| | | app.on('activate', () => { |
| | | const allWindows = BrowserWindow.getAllWindows() |
| | |
| | | createWindow() |
| | | } |
| | | }) |
| | | // 自动更新 |
| | | // app.on('ready', async () => { |
| | | // updater() |
| | | // }) |
| | | |
| | | // new window example arg: new windows url |
| | | // 新窗口示例arg:新的Windows url |
| | | ipcMain.handle("open-win", (event, arg) => { |
| | | const childWindow = new BrowserWindow({ |
| | | webPreferences: { |
| | |
| | | // childWindow.webContents.openDevTools({ mode: "undocked", activate: true }) |
| | | } |
| | | }) |
| | | // 渲染端发送消息到主进程 |
| | | ipcMain.on("main-process-message2",()=>{ |
| | | console.log("33344") |
| | | // 主进程处理日志定义 |
| | | ipcMain.handle('logger', async(event, arg) => { //与渲染进程通信 |
| | | return new Promise((resolve, reject) => { |
| | | logger.info(arg) |
| | | }) |
| | | }) |
| | | /** |
| | | * 版本更新检测 |
| | | */ |
| | | ipcMain.handle("check-update",(e:any)=>{ |
| | | // 获取发送通知的渲染进程窗口 |
| | | const currentWin = getWindowByEvent(e); |
| | | // 升级校验 |
| | | // checkUpdate(currentWin); |
| | | }); |
| | | |
| | | |
| | | /** |
| | | * 通过窗口事件获取发送者的窗口 |
| | | * @param event ipc发送窗口事件 |
| | | */ |
| | | function getWindowByEvent(event: IpcMainEvent): BrowserWindow { |
| | | const webContentsId = event.sender.id; |
| | | for (const currentWin of BrowserWindow.getAllWindows()) { |
| | | if (currentWin.webContents.id === webContentsId) { |
| | | return currentWin; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | // 渲染端发送消息到主进程 |
| | | ipcMain.on('synchronous-message', (event, arg) => { |
| | | console.log(arg) // 在 Node 控制台中打印“ping” |
| | | event.returnValue = store.get('clientCode') |
| | | ipcMain.on("winClose",()=>{ |
| | | win?.close() |
| | | }) |
| | | // 渲染端发送消息到主进程修改confing文件 |
| | | ipcMain.on('setConfingData', (event, arg) => { |
| | | const mode1=store.store |
| | | const mode2={ |
| | | "clientCode": arg.clientCode, |
| | | "machineName": arg.machineName, |
| | | "screenTimeout": arg.screenTimeout, |
| | | } |
| | | }) |