Приложение в единственном экземпляре

Иногда нужно, чтобы приложение работало в единственном экземпляре, например, при добавлении значка в область уведомлений. В этом случае нужно запросить блокировку с помощью метода requestSingleInstanceLock() объекта приложения:

const lockApp = app.requestSingleInstanceLock();

Если блокировка не получена, то приложение уже запущено. В этом случае для текущего объекта приложения следует вызвать метод quit():

if (!lockApp) {
   app.quit();
}

Чтобы привлечь внимание пользователя, следует передать фокус на уже запущенное окно приложения. Сделать это можно внутри обработчика события second-instance:

else {
   app.on('second-instance', (e, commandLine, workingDir) => {
      if (win) {
         if ( win.isMinimized() ) win.restore();
         win.focus();
      }
   });
}

Полный текст программы приведен в листинге 6.3.

Листинг 6.3. Содержимое файла C:\book\e1\main.js

const { app, BrowserWindow } = require('electron');

let win = null;

const lockApp = app.requestSingleInstanceLock();
if (!lockApp) {
   app.quit();
}
else {
   app.on('second-instance', (e, commandLine, workingDir) => {
      if (win) {
         if ( win.isMinimized() ) win.restore();
         win.focus();
      }
   });

   function createWindow() {
      win = new BrowserWindow({
         width: 400,
         height: 300
      });
      win.webContents.loadFile('index.html');
      win.on('closed', () => {
         win = null;
      });
   }
   
   app.whenReady().then( () => {
      createWindow();
      app.on('activate', () => {
         if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
         }
      });
   } );
   
   app.on('window-all-closed', () => {
      if (process.platform !== 'darwin') {
         app.quit();
      }
   });
}

Учебник по Electron js
Учебник по Electron js в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов