zoukankan      html  css  js  c++  java
  • Electron 实现最小化到托盘

    原生实现 Electron 实现最小化到托盘。

    package.json

    {
        "name": "electron-tray",
        "version": "1.0.0",
        "description": "",
        "main": "electron.js",
        "scripts": {
            "test": "echo "Error: no test specified" && exit 1",
            "start": "electron ."
        },
        "author": "",
        "license": "ISC",
        "devDependencies": {
            "electron": "^13.1.6"
        }
    }
    

    electron.js

    /*
     * @Author: Yogile
     * @Gitee: https://gitee.com/yogile
     * @Date: 2021-07-15 19:13:44
     * @LastEditors: Yogile
     * @LastEditTime: 2021-07-16 13:12:58
     * @Description: 
     */
    const electron = require('electron');
    const { app, Menu, Tray } = electron;
    const { BrowserWindow } = electron;
    const path = require('path');
    
    let win;
    let tray = null
    
    function createWindow() {
        // 创建窗口并加载页面
        win = new BrowserWindow({  800, height: 600, icon: path.join(__dirname, 'yogile-site.ico') });
        win.loadURL(`file://${__dirname}/index.html`);
    
        // 打开窗口的调试工具
        win.webContents.openDevTools();
    
        // 关闭默认菜单
        win.setMenu(null);
    
        // 窗口关闭的监听  
        win.on('closed', (event) => {
            win = null;
        });
        // 触发关闭时触发
        win.on('close', (event) => {
            // 截获 close 默认行为
            event.preventDefault();
            // 点击关闭时触发close事件,我们按照之前的思路在关闭时,隐藏窗口,隐藏任务栏窗口
            win.hide();
            win.setSkipTaskbar(true);
    
        });
        // 触发显示时触发
        win.on('show', () => {});
        // 触发隐藏时触发
        win.on('hide', () => {});
    
        // 新建托盘
        tray = new Tray(path.join(__dirname, 'icon.ico'));
        // 托盘名称
        tray.setToolTip('Electron Tray');
        // 托盘菜单
        const contextMenu = Menu.buildFromTemplate([{
                label: '显示',
                click: () => { win.show() }
            },
            {
                label: '退出',
                click: () => { win.destroy() }
            }
        ]);
        // 载入托盘菜单
        tray.setContextMenu(contextMenu);
        // 双击触发
        tray.on('double-click', () => {
            // 双击通知区图标实现应用的显示或隐藏
            win.isVisible() ? win.hide() : win.show()
            win.isVisible() ? win.setSkipTaskbar(false) : win.setSkipTaskbar(true);
        });
    }
    
    app.on('ready', createWindow);
    app.on('window-all-closed', () => {
        if (process.platform !== 'darwin') {
            app.quit();
        }
    });
    
    // 当窗口开始活动时触发
    app.on('activate', () => {
        if (win === null) {
            createWindow();
        }
    });
    
  • 相关阅读:
    基于vue-cli配置移动端自适应项目
    webpack 之 resolve.alias(别名)
    vue 之引用全局样式
    webpack 3.0
    vue 之 data为什么必须声明为返回一个初始数据对象的函数?
    JS柯里化
    《css设计指南》 读书笔记 二
    《css设计指南》 读书笔记 一
    简单的移动端图片预览 包含放大缩小以及对各种手势的判定
    图片拍照上传 使用fileReader 无需跨域
  • 原文地址:https://www.cnblogs.com/Yogile/p/15022277.html
Copyright © 2011-2022 走看看