chenyc
2023-07-19 10bdb4ff5b468c77aad45ab2ec5158d715ab6a3d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import { app, BrowserWindow, shell, ipcMain,Menu } from 'electron'
import { release } from 'os'
import { join } from 'path'
// import updater from "../preload/autoUpdate.js"
import logger from '../preload/logger.js'
import fs from 'fs'
import iconv from 'iconv-lite'
//koa----
import  Koa from 'koa';
import  Router from 'koa-router';
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)
 
 
// Disable GPU Acceleration for Windows 7
if (release().startsWith('6.1')) app.disableHardwareAcceleration()
 
// Set application name for Windows 10+ notifications
if (process.platform === 'win32') app.setAppUserModelId(app.getName())
 
if (!app.requestSingleInstanceLock()) {
  app.quit()
  process.exit(0)
}
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
 
let win: BrowserWindow | null = null
// Here, you can also use other preload
const splash = join(__dirname, '../preload/splash.js')
// 🚧 Use ['ENV_NAME'] avoid vite:define plugin
const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}`
 
async function createWindow() {
  
  win = new BrowserWindow({
    title: 'Main window',
    fullscreen: true,// 开启默认全屏
    autoHideMenuBar:store.get('debug'), //关闭菜单栏
    webPreferences: {
      preload: splash,
      nodeIntegration: true,
      contextIsolation: false,
    },
  })
 
  if (app.isPackaged) {
    win.loadFile(join(__dirname, '../../index.html'))
  } else {
    win.loadURL(url)
  }
 
  // Test active push message to Renderer-process
  // 测试推送消息到Renderer进程
  win.webContents.on('did-finish-load', () => {
    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
  // 用浏览器打开所有链接,而不是应用程序
  win.webContents.setWindowOpenHandler(({ url }) => {
    if (url.startsWith('https:')) shell.openExternal(url)
    return { action: 'deny' }
  })
}
app.whenReady().then(createWindow)
 
app.on('window-all-closed', () => {
  win = null
  if (process.platform !== 'darwin') app.quit()
})
 
 
app.on('second-instance', () => {
  if (win) {
    // 如果用户试图打开另一个窗口,则将焦点放在主窗口上
    if (win.isMinimized()) win.restore()
    win.focus()
  }
})
 
app.on('activate', () => {
  const allWindows = BrowserWindow.getAllWindows()
  if (allWindows.length) {
    allWindows[0].focus()
  } else {
    createWindow()
  }
})
// 自动更新
// app.on('ready', async () => {
//   updater()
// })
 
// 新窗口示例arg:新的Windows url
ipcMain.handle("open-win", (event, arg) => {
  const childWindow = new BrowserWindow({
    webPreferences: {
      preload: splash,
    },
  })
 
  if (app.isPackaged) {
    childWindow.loadFile(join(__dirname, `../renderer/index.html`), {
      hash: `${arg}`,
    })
  } else {
    childWindow.loadURL(`${url}/#${arg}`)
    // childWindow.webContents.openDevTools({ mode: "undocked", activate: true })
  }
})
// 主进程处理日志定义
ipcMain.handle('logger', async(event, arg) => {  //与渲染进程通信
  return new Promise((resolve, reject) => {
    logger.info(arg)
  })
})
// 渲染端发送消息到主进程
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,
  }
})