|
|
@@ -0,0 +1,137 @@
|
|
|
+const { app, BrowserWindow, Menu, ipcMain, globalShortcut, screen, Tray } = require('electron');
|
|
|
+const { join } = require('path');
|
|
|
+const { platform } = require('process');
|
|
|
+class MainSerivce {
|
|
|
+ constructor() {
|
|
|
+ Menu.setApplicationMenu(null) // 去掉菜单栏
|
|
|
+ app.commandLine.appendSwitch('wm-window-animations-disabled') // 拖动闪屏
|
|
|
+ app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
|
|
|
+ this.loadingWin = null
|
|
|
+ this.mainWin = null
|
|
|
+ this.icon = join(__dirname, './icon/playGame.png')
|
|
|
+ this.contrlEvent = null
|
|
|
+ if (!app.requestSingleInstanceLock({ key: 'contrl' })) {
|
|
|
+ app.quit()
|
|
|
+ } else {
|
|
|
+ app.on('ready', this.onRead.bind(this))
|
|
|
+ app.on('activate', (e, isVisible) => {
|
|
|
+ if (!isVisible && this.mainWin) {
|
|
|
+ // 兼容Mac dock 栏点击
|
|
|
+ this.mainWin.show()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ app.on('window-all-closed', () => app.quit())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ createLoading() {
|
|
|
+ const { size: { width, height } } = screen.getPrimaryDisplay()
|
|
|
+ this.loadingWin = new BrowserWindow({
|
|
|
+ frame: false, // 无边框(窗口、工具栏等),只包含网页内容
|
|
|
+ width,
|
|
|
+ height,
|
|
|
+ resizable: false,
|
|
|
+ center: true,
|
|
|
+ icon: this.icon,
|
|
|
+ alwaysOnTop: true,
|
|
|
+ transparent: true // 窗口是否支持透明,如果想做高级效果最好为true
|
|
|
+ })
|
|
|
+ if (app.isPackaged) {
|
|
|
+ this.loadingWin.loadFile(join(__dirname, './loading.html'))
|
|
|
+ } else {
|
|
|
+ this.loadingWin.loadFile('loading.html')
|
|
|
+ }
|
|
|
+ this.loadingWin.on('close', () => {
|
|
|
+ this.loadingWin = null
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ createWindow() {
|
|
|
+ this.mainWin = new BrowserWindow({
|
|
|
+ minWidth: 1300,
|
|
|
+ minHeight: 760,
|
|
|
+ width: 1300,
|
|
|
+ height: 760,
|
|
|
+ frame: false,
|
|
|
+ transparent: true,
|
|
|
+ icon: this.icon,
|
|
|
+ webPreferences: {
|
|
|
+ contextIsolation: true,
|
|
|
+ nodeIntegration: true,
|
|
|
+ webSecurity: false, // 去掉跨越
|
|
|
+ nodeIntegrationInWorker: true,
|
|
|
+ preload: join(__dirname, './preload.js')
|
|
|
+ },
|
|
|
+ show: false
|
|
|
+ })// 创建一个窗口
|
|
|
+
|
|
|
+ // 不同环境加载不同文件
|
|
|
+ if (app.isPackaged) {
|
|
|
+ this.mainWin.loadFile(join(__dirname, './index.html'))
|
|
|
+ } else {
|
|
|
+ this.mainWin.loadURL('http://localhost:6547/')
|
|
|
+ }
|
|
|
+
|
|
|
+ // 事件监听
|
|
|
+ this.mainWin.on('close', () => { this.mainWin = null })
|
|
|
+ }
|
|
|
+
|
|
|
+ onRead() {
|
|
|
+ this.createLoading()
|
|
|
+ this.createWindow()
|
|
|
+
|
|
|
+ // 图标
|
|
|
+ const tray = new Tray(this.icon)
|
|
|
+ const contextMenu = Menu.buildFromTemplate([
|
|
|
+ {
|
|
|
+ label: '退出',
|
|
|
+ click: () => {
|
|
|
+ this.mainWin.close()
|
|
|
+ app.quit()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ])
|
|
|
+ tray.setToolTip('demo')
|
|
|
+ tray.on('click', () => this.mainWin.show())
|
|
|
+
|
|
|
+ // 注册调试模式
|
|
|
+ globalShortcut.register('Ctrl+F12', () => {
|
|
|
+ this.mainWin.webContents.toggleDevTools()
|
|
|
+ })
|
|
|
+
|
|
|
+ // 系统环境
|
|
|
+ if (platform === 'win32') {
|
|
|
+ // 右键
|
|
|
+ tray.setContextMenu(contextMenu)
|
|
|
+ // 禁用右键
|
|
|
+ this.mainWin.hookWindowMessage(278, () => {
|
|
|
+ this.mainWin.setEnabled(false);//窗口禁用
|
|
|
+ setTimeout(() => {
|
|
|
+ this.mainWin.setEnabled(true);
|
|
|
+ }, 100) //延时太快会立刻启动,太慢会妨碍窗口其他操作,可自行测试最佳时间
|
|
|
+ return true
|
|
|
+ })
|
|
|
+ } else if (platform === 'darwin') {
|
|
|
+ app.dock.setIcon(join(__dirname, 'electron/icon/playGame@2x.png'))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 通信
|
|
|
+ ipcMain.on('signal', (_, evt, data) => {
|
|
|
+ if (evt === 'close-loading') {
|
|
|
+ if (this.loadingWin) this.loadingWin.close()
|
|
|
+ this.mainWin.show()
|
|
|
+ } else if (evt === 'minWin') {
|
|
|
+ this.mainWin.minimize()
|
|
|
+ } else if (evt === 'closeWin') {
|
|
|
+ this.mainWin.close()
|
|
|
+ } else if (evt === 'maxWin') {
|
|
|
+ const { width, height } = screen.getPrimaryDisplay().size
|
|
|
+ if (data) { this.mainWin.setBounds({ x: 0, y: 0, width, height }) } else {
|
|
|
+ this.mainWin.setBounds({ width: 1300, height: 760 })
|
|
|
+ this.mainWin.center()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+};
|
|
|
+new MainSerivce()
|