Usando electron 16.9.1, he creado una aplicación cuya ventana no puede minimizarse y cuya propiedad alwaysOnTop está establecida en false . Dicho de otro modo, la idea es tener una ventana que no se pueda minimizar y que siempre esté "debajo" de otras ventanas.
La configuración de la ventana se ve así:
const win = new BrowserWindow({ resizable: false, movable: false, minimizable: false, maximizable: false, alwaysOnTop: true, fullscreenable: false, show: false, frame: false, backgroundColor: "#00FFFFFF", transparent: true, webPreferences: { nodeIntegration: true, contextIsolation: false } }); Funciona bien, las funciones de la aplicación funcionan como las planeé, pero con un pequeño defecto: una vez que uso el atajo Win + D , la ventana se minimiza. Soy consciente de que muchas aplicaciones se comportan de esta manera, pero lo que realmente quiero saber es si hay alguna forma de evitarlo.
[Actualización] Me di cuenta de la imposibilidad de lo que estoy tratando de pedir y, en cambio, ahora estoy probando otro enfoque: escuchar un evento de "mostrar el escritorio" en electron. Cada vez que se active ese evento, volveré a mostrar la ventana. Y así, el problema ahora ha cambiado a: ¿cómo puedo monitorear tal evento ?
Lo que realmente quiero lograr es permitir que cualquier ventana la supere, pero no el escritorio.
Cada vez que se active ese evento, volveré a mostrar la ventana. Y así, el problema ahora ha cambiado a: ¿cómo puedo monitorear tal evento?
Cuando se establece minimizable: true , BrowserWindow activa el evento de minimize cuando se presiona Win+D y Win+M . Por lo tanto, podemos configurar minimizable: true y escucharlos, incluidos los eventos minimizados por el usuario y la restauración de la ventana. Como frame:false está configurado, el usuario no verá el botón de minimizar, solo estará disponible la opción de hacer clic en el icono de la barra de tareas.
let mainWindow; let counter = 0; function createWindow() { mainWindow = new BrowserWindow({ width: 600, height: 300, show: false, resizable: false, movable: false, minimizable: true, /* keep it true */ maximizable: false, alwaysOnTop: false, fullscreenable: false, frame: false, backgroundColor: '#00FFFFFF', webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: true, enableRemoteModule: false, nodeIntegration: false, }, }); mainWindow.loadURL(indexPath); //try to restore window on minimize mainWindow.on('minimize', (e) => { e.preventDefault(); console.log('minimize', ++counter); //try changing delay value setTimeout(() => mainWindow.restore(), 200); }); mainWindow.on('restore', () => { console.log('restore', counter); }); mainWindow.once('ready-to-show', () => { mainWindow.show(); if (dev) { mainWindow.webContents.openDevTools(); } }); mainWindow.on('closed', function () { mainWindow = null; }); }
El escritorio no aparece inmediatamente, lleva tiempo, por lo que no podemos mantener la demora demasiado baja para restaurar nuestra ventana. Deliberadamente mantuve el retraso alto en el código de la demostración. Una vez que llame a la restauración, las próximas llamadas de restauración no tendrán efecto. El inconveniente es que el usuario podrá hacer clic en el ícono de la aplicación en la barra de tareas y la aplicación se recuperará.
Ahora tenemos que lidiar con deshabilitar el atajo de teclado Win-D,
entonces usamos el módulo globalShortcut .
const { app, globalShortcut } = require('electron') globalShortcut.unregister('Super+D')prueba estas teclas EN LUGAR de Super:
Prueba también D mayúscula y d minúscula
POR FAVOR TAMBIÉN PRUEBE:
globalShortcut.register('Super+D', function() { console.log('Blocked'); return false; })No se confunda porque le estoy pidiendo que registre la clave que en realidad solicitó anular el registro, ESTA IDEA DE REGISTRAR LA CLAVE SURGIÓ COMO alguien dijo enGitHub
El registro de la clave en la aplicación de electrones hace que no funcione en ningún lado.
Consulte la documentación: https://www.electronjs.org/docs/latest/api/global-shortcut#globalshortcutregisteraccelerator-callback
P. Estoy seguro de que esto no funcionará en su mayoría ya que Windows posee el derecho de la tecla Win, pero inténtalo, te pido que lo
trymuchas veces porque no lo he probado 😁
Ver
https://stackoverflow.com/a/44308648/14862885
Te presenta un nuevo módulo electronLocalshortcut
probar:
const {app, globalShortcut} = require('electron'); win = new BrowserWindow(); electronLocalshortcut.register(win, 'Super+D', () => {//Even this uses the same REGISTER method to disable shortcut console.log('Windows Button pressed'); return false; });