使用electron将应用程序加入到系统托盘

博主电脑??进水坏了之后,MDZZ......来回折腾好几个来回,第三次维修店??拿电脑??,终于修好了~.废话不多一如既往先上图

    一、将应用程序加入系统托盘

微信对于现代人来说已经是一种生活方式,支持单人、多人参与的一款跨平台的通讯工具。

通过手机网络发送语音、图片、视频和文字。其主要核心技术功能是(仅代表博主个人观点) InstantMessaging(即时通讯,实时传讯) 原谅博主资历尚浅,这里暂且不述~.

微信虽然大家都用,但也不见得自己无论是从产品方面或是技术方面会用/了解她,, 博主跑题了.......

回到正文, 微信启动时,系统托盘中会自动添加一个微信启动程序图标使用electron如何实现这种效果昵?

 1 //electron
 2 const electron = require(‘electron‘);
 3 const app = electron.app;
 4
 5 const path = require(‘path‘);
 6
 7 //用一个 Tray 来表示一个图标,这个图标处于正在运行的系统的通知区 ,通常被添加到一个 context menu 上.
 8 const Menu = electron.Menu;
 9 const Tray = electron.Tray;
10
11 //托盘对象
12 var appTray = null;
13
14 function createWindow() {
15     // Create the browser window.
16     mainWindow = new BrowserWindow({
17         width: 1000,
18         height: 600,
19         resizable: true,
20         title: ‘将应用程序添加至系统托盘‘,
21         skipTaskbar:false
22     })
23     //系统托盘右键菜单
24     var trayMenuTemplate = [
25         {
26             label: ‘设置‘,
27             click: function () {} //打开相应页面
28         },
29          {
30             label: ‘意见反馈‘,
31             click: function () {}
32         },
33         {
34             label: ‘帮助‘,
35             click: function () {}
36         },
37         {
38             label: ‘关于微信‘,
39             click: function () {}
40         },
41         {
42             label: ‘退出微信‘,
43             click: function () {
44                 //ipc.send(‘close-main-window‘);
45                  app.quit();
46             }
47         }
48     ];
49
50     //系统托盘图标目录
51     trayIcon = path.join(__dirname, ‘tray‘);
52
53     appTray = new Tray(path.join(trayIcon, ‘app.ico‘));
54
55     //图标的上下文菜单
56     const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
57
58     //设置此托盘图标的悬停提示内容
59     appTray.setToolTip(‘This is my application.‘);
60
61     //设置此图标的上下文菜单
62     appTray.setContextMenu(contextMenu);
63 }
64
65 // This method will be called when Electron has finished
66 // initialization and is ready to create browser windows.
67 // Some APIs can only be used after this event occurs.
68 app.on(‘ready‘, createWindow);
69
70
71 // Quit when all windows are closed.
72 app.on(‘window-all-closed‘, function() {
73     // On OS X it is common for applications and their menu bar
74     // to stay active until the user quits explicitly with Cmd + Q
75     if (process.platform !== ‘darwin‘) {
76         app.quit()
77     }
78 })

    二、系统托盘程序右键菜单

就是步骤一生命 trayMenuTemplate 对象,加入托盘上下文菜单 //设置此图标的上下文菜单 appTray.setContextMenu(contextMenu); 即可,

而进入右键菜单相应页面就要涉及主线程与渲染线程交互.对线程不了解的可参考之前写的博客主线程与渲染线程之间通信

    三、托盘来电消息的闪烁

像微信一样,推送一条未读新消息闪烁,其原理不同时刻图标切换,一张透明与不透明图标切换。

//系统托盘图标闪烁
var count = 0,timer = null;
    timer=setInterval(function() {
        count++;
        if (count%2 == 0) {
            tray.setImage(path.join(trayIcon, ‘app.ico‘))
        } else {
            tray.setImage(path.join(trayIcon, ‘appa.ico‘))
        }
    }, 600);

    //单点击 1.主窗口显示隐藏切换 2.清除闪烁
    tray.on("click", function(){
        if(!!timer){
            tray.setImage(path.join(appTray, ‘app.ico‘))
            //主窗口显示隐藏切换
            mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show();
        }
})

    四、加入未读的音频

若对方发送一条未读消息,提示用户滴滴滴声音??......至于音频(使用HTML5 Audio即可)什么时候停止,取决你对用户的界定.

 1 //playAudio
 2 function playAudio(){
 3     var audio = new Audio(__dirname + ‘/tray/app.wav‘);
 4     audio.play();
 5     setTimeout(function(){
 6         console.log("暂停播放....");
 7         audio.pause();// 暂停
 8     }, 800)
 9 }
10 playAudio();

最后代码汇总,代码太长折叠 ??

 1 //electron
 2 const electron = require(‘electron‘);
 3 const app = electron.app;
 4
 5 const path = require(‘path‘);
 6
 7 //用一个 Tray 来表示一个图标,这个图标处于正在运行的系统的通知区 ,通常被添加到一个 context menu 上.
 8 const Menu = electron.Menu;
 9 const Tray = electron.Tray;
10
11 //托盘对象
12 var appTray = null;
13
14 //createWindow
15 function createWindow() {
16     // Create the browser window.
17     mainWindow = new BrowserWindow({
18         width: 1000,
19         height: 600,
20         resizable: true,
21         title: ‘将应用程序添加至系统托盘‘,
22         skipTaskbar:false
23     })
24     //系统托盘右键菜单
25     var trayMenuTemplate = [
26         {
27             label: ‘设置‘,
28             click: function () {} //打开相应页面
29         },
30          {
31             label: ‘意见反馈‘,
32             click: function () {}
33         },
34         {
35             label: ‘帮助‘,
36             click: function () {}
37         },
38         {
39             label: ‘关于微信‘,
40             click: function () {}
41         },
42         {
43             label: ‘退出微信‘,
44             click: function () {
45                 //ipc.send(‘close-main-window‘);
46                  app.quit();
47             }
48         }
49     ];
50
51     //系统托盘图标目录
52     trayIcon = path.join(__dirname, ‘tray‘);
53     appTray = new Tray(path.join(trayIcon, ‘app.ico‘));
54     //图标的上下文菜单
55     const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
56     //设置此托盘图标的悬停提示内容
57     appTray.setToolTip(‘This is my application.‘);
58     //设置此图标的上下文菜单
59     appTray.setContextMenu(contextMenu);
60
61
62
63     //系统托盘图标闪烁
64     var count = 0,timer = null;
65     timer=setInterval(function() {
66         count++;
67         if (count%2 == 0) {
68             tray.setImage(path.join(trayIcon, ‘app.ico‘))
69         } else {
70             tray.setImage(path.join(trayIcon, ‘appa.ico‘))
71         }
72     }, 600);
73
74     //单点击 1.主窗口显示隐藏切换 2.清除闪烁
75     tray.on("click", function(){
76         if(!!timer){
77             tray.setImage(path.join(appTray, ‘app.ico‘))
78             //主窗口显示隐藏切换
79             mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show();
80         }
81     })
82 }
83 // This method will be called when Electron has finished
84 // initialization and is ready to create browser windows.
85 // Some APIs can only be used after this event occurs.
86 app.on(‘ready‘, createWindow);
87
88 // Quit when all windows are closed.
89 app.on(‘window-all-closed‘, function() {
90     // On OS X it is common for applications and their menu bar
91     // to stay active until the user quits explicitly with Cmd + Q
92     if (process.platform !== ‘darwin‘) {
93         app.quit()
94     }
95 })

作者:Avenstar

出处:http://www.cnblogs.com/zjf-1992/p/7534944.html

关于作者:专注于前端开发

本文版权归作者所有,转载请标明原文链接

资料参考

https://github.com/amhoho/electron-cn-docs/

https://github.com/demopark/electron-api-demos-Zh_CN

https://www.w3cschool.cn/electronmanual/electronmanual-tray.html

https://github.com/electron/electron/blob/master/docs-translations/zh-CN/api/browser-window.md

https://github.com/electron/electron/blob/master/docs-translations/zh-CN/api/tray.md

https://electron.atom.io/docs/

时间: 2024-07-30 13:43:09

使用electron将应用程序加入到系统托盘的相关文章

系统托盘编程完全指南

原文:http://www.hellocpp.net/Articles/Article/574.aspx 第一部分 自从Windows 95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱.使用系统托盘UI的Windows应用程序数不胜数,比如"金山词 霸"."Winamp"."RealPlayer"等等.那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较系统地描述托盘应用的 编程.并创建自己的C++类来增强系

小程序新零售系统能给企业带来哪些效益

小程序新零售系统怎么帮助企业结合O2O 1.小程序新零售系统的核心模式,新零售=大数据 线上交易平台 线下的体验平台.支付.最有效的物流整合, 线上与线下渠道的打通,以大数据作为指引,以支付和物流作为完成闭环的一节,这五步,构成了未来新零售的骨骼. 2.是消费者的诉求驱动了生产链.刘兴波并不觉得销售传统如人们所说的被颠覆了,反而只是市场的一种进步,是消费习惯和销售形态之间的共同进步.人们逐渐迁移至移动端,更加数字化,产生了更强的主观意识,而"现代人"自主的生活方式探寻出了新零售的发展方

微信小程序购物商城系统开发系列-目录结构

上一篇我们简单介绍了一下微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇),相信大家都已经蠢蠢欲试建立一个自己的小程序,去完成一个独立的商城网站. 先别着急我们一步步来,先尝试下写一个自己的小demo. 这一篇文章我们主要的是介绍一下小程序的一些目录结构,以及一些语法,为我们后面的微信小程序商城系统做铺垫. 首先我们来了解下小程序的目录结构 Pages 我们新建的一些页面将保存在这个文件夹下面,每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js.index.

小程序点餐系统app平台

微信小程序已经上线半年了(陈琦:138-2848-7919 可微)在过去的半年里这个超级流量入口微信小程序在不断的完善,不断的开放多种功能,从而实现颠覆线下实体的梦想,那么对于餐饮行业如何借助小程序这个超级流量入口来让销量暴增呢?赢在移动小程序点餐系统通过在点餐.排队等功能借助小程序的能力,让餐饮商户实现高效运营. 一.小程序点餐系统有哪些功能? 1.扫码下单:节省点餐时间 在高峰期,顾客可在排队期间通过手机扫描餐厅门口展架上的二维码,进入点餐小程序,率先查看菜单,进行预先点餐,热销菜.创意菜.

java应用程序-系统托盘

本实例是用来制作应用程序的系统托盘,比如类似qq在窗体的右下角的图标格式.代码直接复制可用. 1 import java.awt.AWTException; 2 import java.awt.Image; 3 import java.awt.MenuItem; 4 import java.awt.PopupMenu; 5 import java.awt.SystemTray; 6 import java.awt.TrayIcon; 7 import java.awt.event.ActionE

C++错误——”无法启动程序”…\xxx.exe” 系统找不到指定的文件”

背景 在VS2010环境下,升级了一个用C++编写的程序,编译生成成功,但是,不能在VS中直接运行(可以通过打开debug文件目录的exe应用程序运行),提示以下错误:"无法启动程序"-\xxx.exe" 系统找不到指定的文件",如截图1. 截图1 解决方法 1.选择工程,右键单击属性,打开工程的属性页,参考截图2: 截图2 2.选择"配置属性->General",选择output directory ,设置为"inherit f

玩转VC++系统托盘程序(WIN8)

 WINDOWS系统托盘是一个特殊区域,通常在桌面的右下角,也就是任务栏的右边.系统常驻在托盘的程序有时钟,音量控制,输入法,网络状态等.第三方应用如QQ程序也是一个典型的托盘程序,当最小化时企鹅会乖乖的待在屏幕右下角等待主人的呼唤. 系统托盘的方便之处在于,程序在暂时不用时,将它放到托盘里,随用随叫,不必将其关闭.而QQ在接收到消息后,也会在托盘中闪动提示,十分人性化. 那么如何用VC++来开发托盘程序呢?下面会用一个例子来玩转WINDOWS托盘程序. 首先,定义一下需要的功能.(需求确定

微信小程序购物商城系统开发系列

微信小程序购物商城系统开发系列 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将给予微信小程序进行研发.基于对它的敬畏以及便于大家快速上手,特整理微信小程序商城开发系列,未来将持续增加微信小程序技术文章,让大家可全面了解如何快速开发微信小程序商城. 本篇文章主要介绍微信小程序官方提供的开发工具,俗话说:欲工善其身,必先利其器. 小程序开发文档地址

如何让自己的Android程序永不被系统kill

如何让自己的Android程序永不被系统kill 相关知识: 一般来说,在Android系统中,当某进程较长时间不活动,或系统资源比较紧时,该进程可能被系统kill掉,以此来回收一些资源.Android系统会根据进程的优先级来选择性地杀死一些进程,优先级从高到低依次是: 1. 前台进程(Foreground Process) 2. 可视进程(Visible Process) 3. 服务进程(Service Process) 4. 后台进程(Background Process) 5. 空进程(E