任务栏自定义
概述
Electron 提供了 API 来配置应用程序在 Windows 任务栏中的图标。此 API 支持仅限 Windows 的功能,例如创建 JumpList
,自定义缩略图和工具栏,图标覆盖,以及所谓的 “闪烁框架”效果,以及跨平台功能,例如最近文档和应用程序进度。
JumpList
Windows 允许应用程序定义一个自定义的上下文菜单,当用户右键单击任务栏中的应用程序图标时会显示该菜单。该上下文菜单称为 JumpList
。您可以在 JumpList 的 Tasks
类别中指定自定义操作,如 MSDN 中所述
应用程序根据程序的功能和用户期望使用它们执行的关键操作来定义任务。任务应该是上下文无关的,因为应用程序不需要运行才能使其工作。它们也应该是普通用户在应用程序中执行的统计上最常见的操作,例如撰写电子邮件消息或在邮件程序中打开日历、在文字处理器中创建新文档、以某种模式启动应用程序或启动其子命令之一。应用程序不应在菜单中塞满标准用户不需要的高级功能或一次性操作(例如注册)。不要使用任务进行促销项目,例如升级或特别优惠。
强烈建议任务列表是静态的。无论应用程序的状态或状态如何,它都应保持不变。虽然可以动态更改列表,但您应该考虑到这可能会使用户感到困惑,他们不希望目标列表的这一部分发生更改。
注意:上面的屏幕截图是 Microsoft Edge 的一般任务示例
与 macOS 中的 Dock 菜单(一个真正的菜单)不同,Windows 中的用户任务类似于应用程序快捷方式。例如,当用户单击任务时,将使用指定的参数执行该程序。
要为您的应用程序设置用户任务,您可以使用 app.setUserTasks API。
示例
设置用户任务
从快速入门指南中的工作应用程序开始,使用以下行更新 main.js
文件
const { app } = require('electron')
app.setUserTasks([
{
program: process.execPath,
arguments: '--new-window',
iconPath: process.execPath,
iconIndex: 0,
title: 'New Window',
description: 'Create a new window'
}
])
清除任务列表
要清除任务列表,需要在 main.js
文件中调用带有空数组的 app.setUserTasks
。
const { app } = require('electron')
app.setUserTasks([])
注意:即使在关闭应用程序后,用户任务仍会显示,因此为任务指定的图标和程序路径应一直存在,直到卸载应用程序为止。
缩略图工具栏
在 Windows 上,您可以向应用程序窗口的任务栏布局添加带有指定按钮的缩略图工具栏。它为用户提供了一种访问特定窗口命令的方式,而无需恢复或激活该窗口。
如 MSDN 中所述
此工具栏是熟悉的标准工具栏通用控件。它最多有七个按钮。每个按钮的 ID、图像、工具提示和状态都在结构中定义,然后传递到任务栏。应用程序可以根据其当前状态显示、启用、禁用或隐藏缩略图工具栏中的按钮。
例如,Windows Media Player 可能会提供标准媒体传输控件,例如播放、暂停、静音和停止。
注意:上面的屏幕截图是 Windows Media Player 的缩略图工具栏示例
要在应用程序中设置缩略图工具栏,您需要使用 BrowserWindow.setThumbarButtons
示例
设置缩略图工具栏
从快速入门指南中的工作应用程序开始,使用以下行更新 main.js
文件
const { BrowserWindow, nativeImage } = require('electron')
const path = require('node:path')
const win = new BrowserWindow()
win.setThumbarButtons([
{
tooltip: 'button1',
icon: nativeImage.createFromPath(path.join(__dirname, 'button1.png')),
click () { console.log('button1 clicked') }
}, {
tooltip: 'button2',
icon: nativeImage.createFromPath(path.join(__dirname, 'button2.png')),
flags: ['enabled', 'dismissonclick'],
click () { console.log('button2 clicked.') }
}
])
清除缩略图工具栏
要清除缩略图工具栏按钮,您需要在 main.js
文件中调用带有空数组的 BrowserWindow.setThumbarButtons
。
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.setThumbarButtons([])
任务栏中的图标覆盖
在 Windows 上,任务栏按钮可以使用小覆盖层来显示应用程序状态。
如 MSDN 中所述
图标覆盖用作状态的上下文通知,旨在消除对单独的通知区域状态图标的需求,以向用户传达该信息。例如,Microsoft Outlook 中的新邮件状态目前在通知区域中显示,现在可以通过任务栏按钮上的覆盖来指示。同样,您必须在开发周期中决定哪种方法最适合您的应用程序。覆盖图标旨在提供重要的、长期存在的状态或通知,例如网络状态、消息程序状态或新邮件。不应向用户呈现不断变化的覆盖层或动画。
注意:上面的屏幕截图是任务栏按钮上覆盖的示例
要为窗口设置覆盖图标,您需要使用 BrowserWindow.setOverlayIcon API。
示例
从快速入门指南中的工作应用程序开始,使用以下行更新 main.js
文件
const { BrowserWindow, nativeImage } = require('electron')
const win = new BrowserWindow()
win.setOverlayIcon(nativeImage.createFromPath('path/to/overlay.png'), 'Description for overlay')
闪烁框架
在 Windows 上,您可以突出显示任务栏按钮以引起用户的注意。这类似于 macOS 中弹跳 Dock 图标。
如 MSDN 中所述
通常,会闪烁窗口以通知用户该窗口需要注意,但当前没有键盘焦点。
要闪烁 BrowserWindow 任务栏按钮,您需要使用 BrowserWindow.flashFrame API。
示例
从快速入门指南中的工作应用程序开始,使用以下行更新 main.js
文件
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.once('focus', () => win.flashFrame(false))
win.flashFrame(true)
注意:不要忘记调用
win.flashFrame(false)
以关闭闪烁。在上面的示例中,当窗口获得焦点时会调用它,但您可以使用超时或其他事件来禁用它。