Вывод приложения electron на передний план с помощью глобального ярлыка (например, Spotlight/Launchy)
Я ищу, чтобы воспроизвести поведение, подобное тому, что Launchy / Quicksilver / Spotlight.
Я хочу иметь приложение electron, которое всегда работает. Когда я нажимаю клавишу быстрого доступа, приложение electron выводится на передний план и фокусируется.
Я понимаю, что модуль globalShortcut может использоваться для привязки ярлыка, однако я не могу понять, как сделать этот ярлык триггером, выводящим приложение на передний план.
любая помощь будет высоко оцененный...
1 ответов
давайте начнем с самого простого случая, а затем построим наше решение, чтобы лучше обрабатывать некоторые крайние случаи.
самый простой возможный случай-показать окно, которое уже открыто при нажатии глобального ярлыка, который мы зарегистрировали.
const path = require('path');
const { app, BrowserWindow, globalShortcut } = require('electron');
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow();
mainWindow.loadURL(path.join(__dirname, 'index.html'));
const shortcut = globalShortcut.register('Control+Space', () => {
mainWindow.show();
});
if (!shortcut) { console.log('Registration failed.'); }
});
этот код имеет некоторые проблемы, хотя. Хорошей новостью является то, что он все еще работает, если окно было свернуто. Плохая новость заключается в том, что он не будет работать, если окно было закрыто. Это потому, что закрытие последнего окна завершается приложение. Лентяй. (Честно говоря, я был немного удивлен этим, но вот что происходит. Итак, давайте продолжим.)
давайте остановим это.
app.on('window-all-closed', (event) => {
event.preventDefault();
});
хорошо, наше приложение не выходит, но оно падает.
Uncaught Exception:
Error: Object has been destroyed
Хорошо, хорошо. Это потому, что окно разрушается, когда оно близко. Так что давай не будем закрывать. Давай спрячем его, хорошо? Внутри app.on('ready', () => {…})
добавить следующее:
mainWindow.on('close', (event) => {
event.preventDefault();
mainWindow.hide();
});
конечный результат выглядит это:
const path = require('path');
const { app, BrowserWindow, globalShortcut } = require('electron');
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow();
mainWindow.loadURL(path.join(__dirname, 'index.html'));
const shortcut = globalShortcut.register('Control+Space', () => {
mainWindow.show();
});
if (!shortcut) { console.log('Registration failed.'); }
mainWindow.on('close', (event) => {
event.preventDefault();
mainWindow.hide();
});
});
app.on('window-all-closed', (event) => {
event.preventDefault();
});
и с этим вы должны иметь базовые функции на месте. Нажмите глобальный ярлык, и появится окно. Отпустите его, нажмите клавиши и наблюдайте за его появлением.