Перейти к основному содержанию

Горячие клавиши

Accelerators

Accelerators are strings that can be used to represent keyboard shortcuts throughout your Electron. These strings can contain multiple modifiers keys and a single key code joined by the + character.

[!NOTE] Accelerators are case-insensitive.

Доступные модификаторы

  • Command (или Cmd для краткости)
  • Control (или Ctrl для краткости)
  • CommandOrControl (или CmdOrCtrl для краткости)
  • Alt
  • Option
  • AltGr
  • Shift
  • Super (or Meta as alias)

Доступные коды клавиш

  • 0 - 9
  • A - Z
  • F1 - F24
  • Различные знаки препинания: ), !, @, #, $, %, ^, &, *, (, :, ;, :, +, =, <, ,, _, -, >, ., ?, /, ~, `, {, ], [, |, \, }, "
  • Plus
  • Space
  • Tab
  • Capslock
  • Numlock
  • Scrolllock
  • Backspace
  • Delete
  • Insert
  • Return (или Enter как псевдоним)
  • Up, Down, Left и Right
  • Home и End
  • PageUp и PageDown
  • Escape (или Esc для краткости)
  • VolumeUp, VolumeDown и VolumeMute
  • MediaNextTrack, MediaPreviousTrack, MediaStop и MediaPlayPause
  • PrintScreen
  • NumPad клавиши
    • num0 - num9
    • numdec - клавиша десятичный разделитель
    • numadd - клавиша + на numpad
    • numsub - клавиша - на numpad
    • nummult - клавиша * на numpad
    • numdiv - клавиша ÷ на numpad

Cross-platform modifiers

Many modifier accelerators map to different keys between operating systems.

ModifiermacOSWindows and Linux
CommandOrControlCommand (⌘)Control
CommandCommand (⌘)Нет
ControlControl (^)Control
AltOption (⌥)Alt
OptionOption (⌥)Нет
Super (Meta)Command (⌘)Windows (⊞)
информация
  • On Linux and Windows, the Command modifier does not have any effect. In general, you should use the CommandOrControl modifier instead, which represents ⌘ Cmd on macOS and Ctrl on Linux and Windows.
  • Используйте Alt вместо опции. The ⌥ Opt key only exists on macOS, whereas the Alt will map to the appropriate modifier on all platforms.

Примеры

Here are some examples of cross-platform Electron accelerators for common editing operations:

  • Copy: CommandOrControl+C
  • Paste: CommandOrControl+V
  • Undo: CommandOrControl+Z
  • Redo: CommandOrControl+Shift+Z

Local shortcuts

Local keyboard shortcuts are triggered only when the application is focused. These shortcuts map to specific menu items within the app's main application menu.

To define a local keyboard shortcut, you need to configure the accelerator property when creating a MenuItem. Then, the click event associated to that menu item will trigger upon using that accelerator.

Opening a dialog via accelerator (local)
const { dialog, Menu, MenuItem } = require('electron/main')

const menu = new Menu()

// The first submenu needs to be the app menu on macOS
if (process.platform === 'darwin') {
const appMenu = new MenuItem({ role: 'appMenu' })
menu.append(appMenu)
}

const submenu = Menu.buildFromTemplate([{
label: 'Open a Dialog',
click: () => dialog.showMessageBox({ message: 'Hello World!' }),
accelerator: 'CommandOrControl+Alt+R'
}])
menu.append(new MenuItem({ label: 'Custom Menu', submenu }))

Menu.setApplicationMenu(menu)

In the above example, a native "Hello World" dialog will open when pressing ⌘ Cmd+⌥ Opt+R on macOS or Ctrl+Alt+R on other platforms.

[!TIP] Accelerators can work even when menu items are hidden. On macOS, this feature can be disabled by setting acceleratorWorksWhenHidden: false when building a MenuItem.

[!TIP] On Windows and Linux, the registerAccelerator property of the MenuItem can be set to false so that the accelerator is visible in the system menu but not enabled.

Global shortcuts

Global keyboard shortcuts work even when your app is out of focus. To configure a global keyboard shortcut, you can use the globalShortcut.register function to specify shortcuts.

Opening a dialog via accelerator (global)
const { dialog, globalShortcut } = require('electron/main')

globalShortcut.register('CommandOrControl+Alt+R', () => {
dialog.showMessageBox({ message: 'Hello World!' })
})

To later unregister a shortcut, you can use the globalShortcut.unregisterAccelerator function.

Opening a dialog via accelerator (global)
const { globalShortcut } = require('electron/main')

globalShortcut.unregister('CommandOrControl+Alt+R')

[!WARNING] On macOS, there's a long-standing bug with globalShortcut that prevents it from working with keyboard layouts other than QWERTY (electron/electron#19747).

Shortcuts within a window

В графическом процессе

If you want to handle keyboard shortcuts within a BaseWindow, you can listen for the keyup and keydown DOM Events inside the renderer process using the addEventListener API.

function handleKeyPress (event) {
// You can put code here to handle the keypress.
document.getElementById('last-keypress').innerText = event.key
console.log(`You pressed ${event.key}`)
}

window.addEventListener('keyup', handleKeyPress, true)

[!NOTE] The third parameter true indicates that the listener will always receive key presses before other listeners so they can't have stopPropagation() called on them.

Intercepting events in the main process

The before-input-event event is emitted before dispatching keydown and keyup events in the renderer process. It can be used to catch and handle custom shortcuts that are not visible in the menu.

Intercepting the Ctrl+I event from the main process
const { app, BrowserWindow } = require('electron/main')

app.whenReady().then(() => {
const win = new BrowserWindow()

win.loadFile('index.html')
win.webContents.on('before-input-event', (event, input) => {
if (input.control && input.key.toLowerCase() === 'i') {
console.log('Pressed Control+I')
event.preventDefault()
}
})
})