如何从Windows中的dock或任务栏图标重新打开托盘中的electron应用程序?

如何从Windows中的dock或任务栏图标重新打开托盘中的electron应用程序?,windows,electron,tray,Windows,Electron,Tray,我有一个电子应用程序,它使用Vue作为模板部分。 如果单击关闭按钮,应用程序将移动到托盘。 我需要从dock/app图标/任务栏图标重新启动应用程序,但这并没有发生 无法从托盘重新打开应用程序,或者我们可以说它已处于活动状态 以下是我的电子主流程代码: 'use strict' import fs from 'fs' import path from 'path' import { app, BrowserWindow, shell, ipcMain } from 'electron' imp

我有一个电子应用程序,它使用Vue作为模板部分。 如果单击关闭按钮,应用程序将移动到托盘。 我需要从dock/app图标/任务栏图标重新启动应用程序,但这并没有发生

无法从托盘重新打开应用程序,或者我们可以说它已处于活动状态

以下是我的电子主流程代码:

'use strict'

import fs from 'fs'
import path from 'path'
import { app, BrowserWindow, shell, ipcMain } from 'electron'
import { autoUpdater } from 'electron-updater'
import request from 'request'

if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}

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

function createWindow () {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    minWidth: 800,
    width: 1600,
    height: 900,
    center: true,
    frame: false,
    backgroundColor: '#1A1C1F'
  })

  mainWindow.maximize()
  mainWindow.loadURL(winURL)

  mainWindow.on('closed', () => {
    mainWindow = null
  })

  mainWindow.webContents.on('new-window', (e, url) => {
    e.preventDefault()
    shell.openExternal(url)
  })

  let cliArgs = process.argv
  ipcMain.on('get-cliArgs', (event, args) => {
    event.sender.send('cliArgs', cliArgs)
  })

  if (process.env.NODE_ENV !== 'production') {
    mainWindow.webContents.openDevTools()
  }
}

var shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
  // Someone tried to run a second instance, we should focus our window.
  if (mainWindow) {
    if (mainWindow.isMinimized()) mainWindow.restore()
    mainWindow.focus()
  }
})

if (shouldQuit) {
  app.quit()
  process.exit()
}

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  app.quit()
})

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})

app.on('ready', () => {
  if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
})

您使用哪个命令将窗口最小化到托盘

在我们的应用程序中,我们执行以下操作,以最大限度地减少对托盘的占用,并在需要时恢复窗口:

为了尽量减少:

win.minimize();
要创建用于恢复窗口或退出应用程序的任务栏命令:

托盘=新托盘(“”);
让contextMenu=Menu.buildFromTemplate([
{
标签:“showApp”,单击:()=>{
赢。最大化();
win.setAlwaysOnTop(真);
}
},
{
标签:“退出”,单击:()=>{
app.isQuiting=true;
app.quit();
}
}
]);
tray.setToolTip(“应用程序名称”);
托盘。设置上下文菜单(上下文菜单);
托盘上('右键单击',()=>{
tray.popUpContextMenu();
})
在('点击',()=>{
赢。最大化();
win.setAlwaysOnTop(真);
//从托盘返回时还原覆盖图标
setOverlayIcon(当前OverlayIcon);
});

您使用哪个命令将窗口最小化到托盘

在我们的应用程序中,我们执行以下操作,以最大限度地减少对托盘的占用,并在需要时恢复窗口:

为了尽量减少:

win.minimize();
要创建用于恢复窗口或退出应用程序的任务栏命令:

托盘=新托盘(“”);
让contextMenu=Menu.buildFromTemplate([
{
标签:“showApp”,单击:()=>{
赢。最大化();
win.setAlwaysOnTop(真);
}
},
{
标签:“退出”,单击:()=>{
app.isQuiting=true;
app.quit();
}
}
]);
tray.setToolTip(“应用程序名称”);
托盘。设置上下文菜单(上下文菜单);
托盘上('右键单击',()=>{
tray.popUpContextMenu();
})
在('点击',()=>{
赢。最大化();
win.setAlwaysOnTop(真);
//从托盘返回时还原覆盖图标
setOverlayIcon(当前OverlayIcon);
});

我使用win.hide()命令移动到托盘。和上下文菜单中的win.show()命令。这难道不意味着即使用户不使用electron窗口,electron窗口也总是在运行吗?在我看来,当用户真正想要查看窗口时,关闭窗口并在稍后打开它会更有意义。我使用win.hide()命令移动到任务栏。和上下文菜单中的win.show()命令。这难道不意味着即使用户不使用electron窗口,electron窗口也总是在运行吗?在我看来,当用户真正想要查看窗口时,关闭窗口并在稍后打开它会更有意义。