electron系统通知 隐藏到托盘 electron new Tray

可以用 electron 的 Tray 创建一个系统通知区的图标(也叫托盘),控制隐藏或显示
在这里插入图片描述

在入口文件添加下面的代码

// src/main/index.js
import { ipcMain, Menu, Tray } from 'electron'
const path = require('path')

// 注意这里是全局定义这个隐藏到系统托盘变量,不然下面 new Tray 会报错
let tray = null


function createWindow() {
  // 已定义了mainWindow = new BrowserWindow({...
  // 在这个主程序的函数里面加
  // 创建系统通知区菜单
  //                        ↓ 这里不能用反斜杠 (对应图标的文件夹,名字)
  tray = new Tray(path.join('src\\renderer\\assets', 'icon.ico')) // 用ico图标格式
  
  // 创建托盘右键选项表
  const contextMenu = Menu.buildFromTemplate([
    {
      // 应用退出
      label: '退出',
      click: () => {
        mainWindow.destroy()
      },
    },
  ])
  tray.setToolTip('梓桐的摸鱼小工具') // 鼠标放在托盘上文本
  tray.setContextMenu(contextMenu)
  // 点击图标触发的事件
  tray.on('click', () => {
    // 这里模拟桌面程序点击通知区图标实现显示或隐藏应用的功能
    // mainWindow.isVisible()
    //   ? (mainWindow.hide(), mainWindow.setSkipTaskbar(false))
    //   : (mainWindow.show(), mainWindow.setSkipTaskbar(true))
    // 或者直接只能显示
    mainWindow.show(), mainWindow.setSkipTaskbar(true)
  })
}
// 隐藏主程序
ipcMain.on('windowHide', function() {
  mainWindow.hide()
  mainWindow.setSkipTaskbar(false)
})

let tray = null
注意创建这个系统通知一定要在这里进行全局定义,不然会报错!

下面是完整代码

import { app, ipcMain, BrowserWindow, Menu, Tray } from 'electron'
const path = require('path')

let tray = null // 在全局定义这个隐藏到系统托盘,不然下面 new Tray 会报错
/**
 * Set `__static` path to static files in production
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
 */
if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path')
    .join(__dirname, '/static')
    .replace(/\\/g, '\\\\')
}

let mainWindow
let settingWindow
const winURL =
  process.env.NODE_ENV === 'development'
    ? `http://localhost:9080`
    : `file://${__dirname}/index.html`

function createWindow() {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    height: 200,
    // useContentSize: true,// 用户是否可调节窗口大小
    width: 350,
    resizable: false, // 是否可放大窗口
    maximizable: false, // 双击禁止放大窗口

    titleBarStyle: 'hiddenInset',
    frame: false, // 无边框
    transparent: true,
    // backgroundColor: '#2e2c29',
    // opacity: 0.9, // 应用透明度
    setAlwaysOnTop: true,
    webPreferences: {
      webSecurity: false, // 无需同源策略
    },
  })

  mainWindow.loadURL(winURL)

  // 创建系统通知区菜单
  tray = new Tray(path.join('src\\renderer\\assets', 'icon.ico')) //__dirname, 'icon.ico'))
  const contextMenu = Menu.buildFromTemplate([
    {
      // 应用退出
      label: '退出',
      click: () => {
        mainWindow.destroy()
      },
    },
  ])
  tray.setToolTip('梓桐的摸鱼小工具')
  tray.setContextMenu(contextMenu)
  tray.on('click', () => {
    // 这里模拟桌面程序点击通知区图标实现显示或隐藏应用的功能
    // mainWindow.isVisible()
    //   ? (mainWindow.hide(), mainWindow.setSkipTaskbar(false))
    //   : (mainWindow.show(), mainWindow.setSkipTaskbar(true))
    mainWindow.show(), mainWindow.setSkipTaskbar(true)
  })
}

// 窗口关闭
ipcMain.on('window-close', function() {
  mainWindow.destroy()
})

// 窗口保持最前
ipcMain.on('windowOnTop', function(e, arg) {
  mainWindow.setAlwaysOnTop(arg)
})

// 显示主程序
ipcMain.on('windowShow', function() {
  mainWindow.show()
  mainWindow.setSkipTaskbar(true)
})

// 隐藏主窗口
ipcMain.on('windowHide', function() {
  mainWindow.hide()
  mainWindow.setSkipTaskbar(false)
})
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值