Electron - определение ярлыков
Обычно мы запоминаем определенные ярлыки для всех приложений, которые мы ежедневно используем на нашем ПК. Чтобы ваши приложения казались интуитивно понятными и легкодоступными для пользователя, вы должны разрешить пользователю использовать ярлыки.
Мы будем использовать модуль globalShortcut для определения ярлыков в нашем приложении. Обратите внимание, чтоAccelerators- это строки, которые могут содержать несколько модификаторов и кодов клавиш, объединенные знаком +. Эти ускорители используются для определения сочетаний клавиш в нашем приложении.
Рассмотрим пример и создадим ярлык. Для этого мы будем следовать примеру диалоговых окон, где мы использовали открытое диалоговое окно для открытия файлов. Мы зарегистрируемCommandOrControl+O ярлык, чтобы открыть диалоговое окно.
Наши main.jsкод останется прежним. Так что создайте новыйmain.js файл и введите в него следующий код -
const {app, BrowserWindow} = require('electron')
const url = require('url')
const path = require('path')
const {ipcMain} = require('electron')
let win
function createWindow() {
win = new BrowserWindow({width: 800, height: 600})
win.loadURL(url.format ({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
}
ipcMain.on('openFile', (event, path) => {
const {dialog} = require('electron')
const fs = require('fs')
dialog.showOpenDialog(function (fileNames) {
// fileNames is an array that contains all the selected
if(fileNames === undefined)
console.log("No file selected")
else
readFile(fileNames[0])
})
function readFile(filepath){
fs.readFile(filepath, 'utf-8', (err, data) => {
if(err){
alert("An error ocurred reading the file :" + err.message)
return
}
// handle the file content
event.sender.send('fileData', data)
})
}
})
app.on('ready', createWindow)
Этот код будет открывать открытое диалоговое окно всякий раз, когда наш основной процесс получает сообщение openFile от процесса рендеринга. Раньше это диалоговое окно появлялось при каждом запуске приложения. Давайте теперь ограничим его открытием только при нажатииCommandOrControl+O.
Теперь создайте новый index.html файл со следующим содержанием -
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>File read using system dialogs</title>
</head>
<body>
<p>Press CTRL/CMD + O to open a file. </p>
<script type = "text/javascript">
const {ipcRenderer, remote} = require('electron')
const {globalShortcut} = remote
globalShortcut.register('CommandOrControl+O', () => {
ipcRenderer.send('openFile', () => {
console.log("Event sent.");
})
ipcRenderer.on('fileData', (event, data) => {
document.write(data)
})
})
</script>
</body>
</html>
Мы зарегистрировали новый ярлык и передали обратный вызов, который будет выполняться всякий раз, когда мы нажимаем на этот ярлык. Мы можем отменить регистрацию ярлыков, когда они нам не нужны.
Теперь, когда приложение откроется, мы получим сообщение об открытии файла с помощью только что определенного ярлыка.
Эти ярлыки можно сделать настраиваемыми, позволяя пользователю выбирать свои собственные ярлыки для определенных действий.