Chapter 13無料公開

単一ウィンドウ(シングルインスタンス)の強制 (requestSingleInstanceLock)

Kei Touge
Kei Touge
2021.09.18に更新

https://www.electronjs.org/docs/api/app#apprequestsingleinstancelock

requestSingleInstanceLock()

メインプロセス

main.js
// シングルインスタンス強制の現状 (boolean)
const gotTheLock = app.requestSingleInstanceLock();

if (!gotTheLock) {
  /**
   * すでにインスタンスが存在する場合は
   * あたらしいインスタンスはそのまま終了させる
   */
  app.exit();
} else {
  app.whenReady().then(() => {
    createWindow();
  });
}

Windows で既存のウィンドウを再利用する

メインプロセス

second-instance イベントとして開かれたファイルのパスは process.argv 配列の第 5 要素となることに注意。

main.ts
const createWindow = () => {
  const mainWindow = new BrowserWindow();

  app.on('second-instance', (_e, argv) => {
    // ウィンドウが最小化されていたらレストアして、フォーカスを当てる
    if (mainWindow.isMinimized()) mainWindow.restore();
    mainWindow.focus();

    // ファイルからインスタンスが開始された場合
    if (argv.length >= 4) {
      const filepath = argv[argv.length - 1];

      // レンダラープロセスへファイルパスを送信
      mainWindow.webContents.send('menu-open', filepath);
    }
  });

  mainWindow.loadFile('dist/index.html');
};