Saltar al contenido

Electron.js ¿Cómo minimizar/cerrar la ventana en la bandeja del sistema y restaurar la ventana desde la bandeja?

El paso a paso o código que verás en este post es la resolución más fácil y válida que encontramos a esta inquietud o dilema.

Solución:

De hecho, lo descubrí hace mucho tiempo, pero para las personas que se encuentran con el mismo problema, aquí hay una forma en que pueden lograr minimizar tray y restaurar desde tray. El truco es atrapar close y minimize eventos.

var BrowserWindow = require('browser-window'),

var mainWindow = new BrowserWindow(
    width: 850,
    height: 450,
    title: "TEST",
    icon:'./icon.png'
);

mainWindow.on('minimize',function(event)
    event.preventDefault();
    mainWindow.hide();
);

mainWindow.on('close', function (event) 
    if(!application.isQuiting)
        event.preventDefault();
        mainWindow.hide();
    

    return false;
);

y restaurar desde Tray

var contextMenu = Menu.buildFromTemplate([
     label: 'Show App', click:  function()
        mainWindow.show();
     ,
     label: 'Quit', click:  function()
        application.isQuiting = true;
        application.quit();
     
]);

Actualicé el código con un escenario si desea mostrar el ícono en la bandeja del sistema todo el tiempo hasta que no salga de la aplicación

var  app, BrowserWindow, Tray, Menu  = require('electron')
var path = require('path')
var url = require('url')
var iconpath = path.join(__dirname, 'user.ico') // path of y
var win
function createWindow() 
    win = new BrowserWindow( width: 600, height: 600, icon: iconpath )

    win.loadURL(url.format(
        pathname: path.join(__dirname, 'index.html'),
    ))

    var appIcon = new Tray(iconpath)

    var contextMenu = Menu.buildFromTemplate([
        
            label: 'Show App', click: function () 
                win.show()
            
        ,
        
            label: 'Quit', click: function () 
                app.isQuiting = true
                app.quit()
            
        
    ])

    appIcon.setContextMenu(contextMenu)

    win.on('close', function (event) 
        win = null
    )

    win.on('minimize', function (event) 
        event.preventDefault()
        win.hide()
    )

    win.on('show', function () 
        appIcon.setHighlightMode('always')
    )



app.on('ready', createWindow)

Además de las respuestas anteriores – isQuiting vale la pena configurar la bandera en la aplicación ‘ before-quit devolución de llamada, también. De esta manera, la aplicación se cerrará correctamente si lo solicita el sistema operativo o el usuario de alguna otra manera, por ejemplo, a través del comando de salida de la barra de tareas de Macos Dock. Fragmento completo compatible con TypeScript:

import app, BrowserWindow, Tray, Menu from 'electron';
import * as path from 'path';

let window;
let isQuiting;
let tray;

app.on('before-quit', function () 
  isQuiting = true;
);

app.on('ready', () => 
  tray = new Tray(path.join(__dirname, 'tray.png'));

  tray.setContextMenu(Menu.buildFromTemplate([
    
      label: 'Show App', click: function () 
        window.show();
      
    ,
    
      label: 'Quit', click: function () 
        isQuiting = true;
        app.quit();
      
    
  ]));

  window = new BrowserWindow(
    width: 850,
    height: 450,
    show: false,
  );

  window.on('close', function (event) 
    if (!isQuiting) 
      event.preventDefault();
      window.hide();
      event.returnValue = false;
    
  );
);

Te mostramos las reseñas y valoraciones de los lectores

Acuérdate de que te permitimos añadir un enjuiciamiento certero si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *