electron框架

  1. 框架结构:
  2. 进程间的通信:
  3. 事件管理:
  4. 常用模块:
  5. 打包
    1. 使用electron-builder打包:
    2. 使用electron forge打包:

这几天在写ai提权程序时候用到了它,使用它的原因是它的框架和github pages等结构相似,本想着不用做太多更改,但还是遇到了很多问题,现在勉强能跑起来,在做更多更改之前,先做一下记录。

框架结构:

  • main.js:主进程,负责创建浏览器窗口、管理事件、监听系统事件等。
  • index.html:渲染进程的入口文件,负责渲染页面。
  • package.json:项目配置文件,用于管理项目依赖。
  • renderer.js:渲染进程,负责渲染页面。
  • preload.js:渲染进程的预加载脚本,负责在渲染进程加载页面之前加载资源。

进程间的通信:

不同进程负责不同的工作,有些操作单独进程不能完成,比如electron限制main不能操作渲染进程的dom,而renderer不能使用fs的api,所以需要进程间通信。

举例

// 主进程
const { BrowserWindow } = require('electron')
let win ;
win.webContents.on('did-finish-load', () => {//页面加载完成例
  win.webContents.send('message', 'Hello from main process')
})

// 渲染进程
const { ipcRenderer } = require('electron')
ipcRenderer.on('message', (event, message) => {
  console.log(message)//打印接收的消息
})

参数传递的数量并不限制,但是接收要在event之后依次排列,按顺序接收。

通信的回应:

......
ipcRenderer.on('message', (event, message) => {
  console.log(message)//打印接收的消息
  event.sender.send('reply', 'Hello from renderer process')//回应消息
})

// 主进程
ipcRenderer.on('reply', (event, message) => {
  console.log(message)//打印回应的消息
})

或者

......
ipcRenderer.on('message', (event, message) => {
  console.log(message)//打印接收的消息
  event.reply('reply', 'Hello from renderer process')//回应消息
})

// 主进程
ipcRenderer.on('reply', (event, message) => {
  console.log(message)//打印回应的消息
})

事件管理:

app:控制应用程序的生命周期。 - app.quit():退出应用程序。 - app.exit():退出应用程序。 - app.on('ready', function() {}):应用程序准备就绪。 - app.on('window-all-closed', function() {}):所有窗口都关闭。 - app.on('activate', function() {}):应用程序激活。 - app.getPath(name):获取应用程序的路径。 - app.setPath(name, path):设置应用程序的路径。 - app.isReady():判断应用程序是否准备就绪。
globalShortcut:注册全局快捷键。 - globalShortcut.register(accelerator, function() {}):注册快捷键。 - globalShortcut.unregister(accelerator):注销快捷键。 - globalShortcut.isRegistered(accelerator):判断快捷键是否注册。
BrowserWindow:创建浏览器窗口的接口。 - BrowserWindow.loadURL(url):加载页面。 - BrowserWindow.webContents.on('did-finish-load', function() {}):页面加载完成。 - BrowserWindow.webContents.send(channel, ...args):向渲染进程发送消息。 - BrowserWindow.webContents.on(channel, function(event, ...args) {}):渲染进程接收消息。 - BrowserWindow.on('closed', function() {}):窗口关闭。

常用模块:

一些程序运行依赖模块(当然是不需要记内容的,只需要知道有这么个东西,能干怎么样的事):

fs:用于读写文件。 fs.readFile(path, options, function(err, data) {}):读取文件。 fs.writeFile(path, data, options, function(err) {}):写入文件。 fs.mkdir(path, options, function(err) {}):创建目录。 fs.rmdir(path, options, function(err) {}):删除目录。 fs.readdir(path, options, function(err, files) {}):读取目录。 fs.stat(path, options, function(err, stats) {}):获取文件或目录的状态。 fs.rename(oldPath, newPath, function(err) {}):重命名文件或目录。 fs.unlink(path, function(err) {}):删除文件。 fs.fstat(fd, function(err, stats) {}):获取文件描述符的状态。 fs.close(fd, function(err) {}):关闭文件描述符。 fs.open(path, flags, mode, function(err, fd) {}):打开文件。 fs.read(fd, buffer, offset, length, position, function(err, bytesRead, buffer) {}):读取文件。 fs.write(fd, buffer, offset, length, position, function(err, bytesWritten, buffer) {}):写入文件。 fs.createReadStream(path, options):创建读取流。 fs.createWriteStream(path, options):创建写入流。
os:用于获取系统信息。 os.userInfo(options, function(err, userInfo) {}):获取用户信息。 os.homedir():获取用户目录。 os.tmpdir():获取临时目录。 os.platform():获取操作系统平台。 os.release():获取操作系统版本。 os.type():获取操作系统类型。 os.arch():获取操作系统架构。 os.cpus():获取CPU信息。 os.networkInterfaces():获取网络接口信息。
path:用于处理文件路径。 path.join(path1, path2, ...):拼接路径。 path.resolve(path):解析路径。 path.dirname(path):获取目录。 path.basename(path):获取文件名。 path.extname(path):获取扩展名。
child_process:用于创建子进程。 child_process.exec(command, options, function(err, stdout, stderr) {}):执行命令。 child_process.execFile(file, args, options, function(err, stdout, stderr) {}):执行文件。 child_process.fork(modulePath, args, options):创建子进程。 child_process.spawn(command, args, options):创建子进程。
dialog:用于创建对话框。 dialog.showOpenDialog(options, function(filePaths) {}):打开文件对话框。 dialog.showSaveDialog(options, function(filePath) {}):保存文件对话框。 dialog.showMessageBox(options, function(response) {}):创建消息框。
shell:用于打开文件、文件夹等。 shell.openItem(path):打开文件或文件夹。 shell.openExternal(url):打开外部链接。
Menu:用于创建菜单。 Menu.buildFromTemplate(template):创建菜单。 Menu.setApplicationMenu(menu):设置菜单。
Tray:用于创建托盘图标。 Tray.setToolTip(toolTip):设置托盘图标提示信息。 Tray.setContextMenu(contextMenu):设置托盘图标右键菜单。 Tray.setImage(image):设置托盘图标图像。 Tray.destroy():销毁托盘图标。
powerMonitor:用于监听电源状态变化。 powerMonitor.on('suspend', function() {}):系统进入休眠状态。 powerMonitor.on('resume', function() {}):系统恢复运行状态。 powerMonitor.on('on-ac', function() {}):系统进入AC状态。 powerMonitor.on('on-battery', function() {}):系统进入电池状态。
screen:用于获取屏幕信息。 screen.getPrimaryDisplay():获取主屏幕信息。 screen.getAllDisplays():获取所有屏幕信息。 screen.on('display-added', function(event, display) {}):屏幕增加。 screen.on('display-removed', function(event, display) {}):屏幕移除。 screen.on('display-metrics-changed', function(event, display, changedMetrics) {}):屏幕信息变化。
webFrame:用于控制渲染进程的页面。 webFrame.setZoomFactor(factor):设置缩放比例。 webFrame.setZoomLevel(level):设置缩放级别。 webFrame.setZoomLevelLimits(minimumLevel, maximumLevel):设置缩放级别限制。 webFrame.setLayoutZoomLevelLimits(minimumLevel, maximumLevel):设置布局缩放级别限制。 webFrame.setVisualZoomLevelLimits(minimumLevel, maximumLevel):设置视觉缩放级别限制。
autoUpdater:用于自动更新。

打包

使用electron-builder打包:

  • 安装electron-builder:npm install electron-builder --save-dev
  • 在package.json中添加build脚本:"build": "electron-builder"
  • 运行npm run build命令,打包程序。

使用electron forge打包:

npm install –save-dev @electron-forge/cli
npx electron-forge import
npm run make

官方打包教程:
https://www.electronjs.org/zh/docs/latest/tutorial/%E6%89%93%E5%8C%85%E6%95%99%E7%A8%8B

打包后的exe文件是安装文件,要找到安装到哪里了,不用每次都点击安装。


此方悬停
相册 小说 Ai
/*音乐播放器插件*/ /*
*/