electron自定义托盘 + 托盘闪烁+托盘与进程通信

项目演示
github地址
gitee地址

先看效果

请添加图片描述

如果本地测试没问题 打包之后托盘不显示 100% 就是icon 路径问题

在这里插入图片描述

新建 tore.js

 */
	// 系统托盘
	var appTray = null
    const electron = require('electron');
	const nativeImage = require('electron').nativeImage
    const shell = require('electron').shell
    const ipcMain = electron.ipcMain;

    const Menu = electron.Menu;
    const Tray = electron.Tray;
	let win=null
    const iconPath=__dirname+'\\favicon.ico'  // 如果本地测试没问题  打包之后托盘不显示 100% 就是icon 路径问题  
	const iconFlashPath =__dirname+'\\favicoFlash.ico'
	export function implementSystemTray(APP,WIN) {
		win=WIN
	    appTray = new Tray(iconPath) // 创建与image关联的图标
	    var contextMenu = Menu.buildFromTemplate([ // 创建菜单
	        {
	            label: '给主程序发送消息',
	            click: function () {
					win.webContents.send('accept-tray-messages', "托盘发送得消息,点个赞呀,兄弟")
	            }
	        },
			{
	            label: '打开gitee 项目地址',
	            click: function () {
                    shell.openExternal("https://gitee.com/ranshaka/ran-admin")
	            }
	        },
	        {
                label: '打开github 项目地址',
                click: function () {
                    shell.openExternal("https://github.com/ranshaka/ranAdmin")
	            }
	        },
	        {
	            label: '这不得去博客一键三连',
                click: function () {
                    shell.openExternal("https://i.csdn.net/#/user-center/profile?spm=1001.2101.3001.5111")
	            }
	        },
	        {
	            label: '退出程序',
                click: function () {
                    APP.exit(); // 点击之后退出应用
	            }
	        },
	        {
	            label: '关闭托盘',
	            role: 'close',
	            accelerator: 'CmdOrCtrl+Q'
	        }
	    ])

		// 鼠标放在该系统托盘图标上的提示信息                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
	    appTray.setToolTip('被我抓到了把,你现在是不是在查看托盘~') 

	    appTray.setContextMenu(contextMenu)


	    // 消息通知,利用计时器,通过Image实例和空的Image实例 来实现图标闪动效果;
	    let timer = null
	    let msgFlag = false

		// 监听主进程发送消息
	    ipcMain.on('tary-message', (event, arg) => {
			// 鼠标放在该系统托盘图标上的提示信息
			appTray.setToolTip('您有一条新消息'+arg)
	        timer = setInterval(() => {
	            msgFlag = !msgFlag
	            // msgFlag ? appTray.setImage(new Tray(iconPath) ) : appTray.setImage(new Tray(iconFlashPath) )  
				msgFlag ? appTray.setImage(nativeImage.createEmpty()) : appTray.setImage(iconFlashPath)
	            
	        }, 500)
	    })
	

		// 单击该系统托盘图标,显示隐藏窗口
	    appTray.on('click', (_event, _bounds, _position) => { 
	            clearInterval(timer)
	            timer = null
	            msgFlag = false
				appTray.setImage(iconPath)

	        if (win.isVisible()) {
	            win.hide()
	        } else {
	            win.show()
	        }
	    }) 

	
	}

background.js

// 引入托盘js
import {
  implementSystemTray
} from './electron_layout/tray.js';

async function createWindow() {
.... 
 // 注册托盘
  implementSystemTray(app, win)
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值