Alfa Brain

[Electron] Приложения поверх всех окон — даже в полноэкранном режиме или на других рабочих столах.

Алексей ВечкановАлексей Вечканов   

Перевод и адаптация заметки [Electron] Keep apps on top, whether in full-screen mode or on other desktops. Мне она очень помогла в свое время.

Я пишу приложение на Electron.

Вот что оно должно делать:

- приложение должно быть видно при переключении рабочих столов (Desktop)

- отображается поверх других приложений

- оставаться поверх даже при отображении других приложений в полноэкранном режиме

- оставаться поверх, когда Keynote находится в режиме презентации

Особенно сложно добиться отображения поверх, когда Keynote в режиме презентации. Это заметка - окончательное решение этой проблемы.

Я добавил эту настройку при открытии окон в main.js, который указан в поле main файла package.json.

1const { app, BrowserWindow } = require("electron");
2const path = require('path');
3
4const is_mac = process.platform==='darwin'
5
6if(is_mac) {
7  app.dock.hide()                                     // - 1 - 
8}
9
10const MAIN_WINDOWS_WIDTH = 300;
11const MAIN_WINDOWS_HEIGHT = 350;
12
13function createClapWindow() {
14  // Create the browser window.
15  const mainWindow = new BrowserWindow({
16    width: MAIN_WINDOWS_WIDTH,
17    height: MAIN_WINDOWS_HEIGHT,
18    webPreferences: {
19      preload: path.join(__dirname, 'preload.js'),
20    }
21  })
22
23  mainWindow.setAlwaysOnTop(true, "screen-saver")     // - 2 -
24  mainWindow.setVisibleOnAllWorkspaces(true)          // - 3 -
25  mainWindow.loadFile('public/reaction.html')
26}
27
28app.whenReady().then(() => {
29  createClapWindow()
30})

1. app.dock.hide()

Эта настройка позволяет macOS отображать окно поверх полноэкранного режима. Поскольку в Windows такой настройки нет, я предварительно проверяю, что это именно macOS. Настройка применяется только для macOS.

2. mainWindow.setAlwaysOnTop(true, "screen-saver")

Эта настройка позволяет отображать окно поверх, когда Keynote находится в режиме презентации.

В BrowserWindow есть параметр alwaysOnTop. Когда я устанавливал его в true, окно отображалось поверх других приложений, но не поверх режима презентации Keynote.

Поэтому мне пришлось использовать следующую настройку: mainWindow.setAlwaysOnTop(true, "screen-saver").

3. mainWindow.setVisibleOnAllWorkspaces(true)

Эта настройка позволяет отображать окно при переключении на другие рабочие столы (workspaces).

Справочные ссылки

P.S.

Благодяря этой заметке мне удалось написать эту программу: https://github.com/Hydrock/TransLatte



Поделиться: