После просмотра этого вопроса я провел небольшое исследование вашей темы c. Первое, что пришло в голову, это то, что электрон дает доступ для прослушивания ключевых событий, но в соответствии с этим поток разработчики электронов останавливают электрон, являясь кейлоггером . Таким образом, у меня есть следующий метод для этой проблемы. Я не знаю, являются ли они лучшими для этого сценария, но так я вижу, как это можно сделать. Это в основном построено вокруг электронного хранилища, где оно может быть использовано для сохранения определенной пользователем комбинации клавиш. Таким образом, приложение может извлечь определенную комбинацию клавиш из хранилища (если комбинации не настроены, она использует комбинацию клавиш по умолчанию, указанную в схеме) и зарегистрировать globalshortcut
, используя ее. Я предоставил инструкции по его реализации
- Установите и настройте значение ключа по умолчанию, используя электронный магазин . Как следует
main. js
const Store = require('electron-store');
const schema = {
defaultKeyCombination: {
type: 'string',
default: 'CommandOrControl+Y'
}
}
const store = new Store({schema});
Импортируя
defaultKeyCombination
, вы можете зарегистрировать
глобальный ярлык , когда приложение будет готово. (не забудьте удалить globalshortcut, когда приложение уничтожено)
app.on('ready', () => {
// Register a defaultKeyCombination shortcut listener.
globalShortcut.register(store.get('defaultKeyCombination'), () => {
// Do stuff when Y and either Command/Control is pressed.
})
})
Создайте и откройте другое окно браузера с помощью щелчка меню (меню> параметры> настроить) и разрешите пользователям создавать / вводить модификаторы ускорителя в поле ввода, используя доступные модификаторы и коды клавиш (их лучше показывать в новом окне под полем ввода); Например: пользователь может ввести MODIFIER + KEY_CODE , как CmdOrCtrl
+
A
, для ввода в браузере.
После того, как пользователь нажмет Кнопка submit
отправляет введенную комбинацию клавиш с помощью IPCRenderer в основной процесс и устанавливает значение хранилища defaultKeyCombination
по полученному значению.
Запуск IP C чтобы отправить ответ, сказав пользователю «Пожалуйста, перезапустите приложение» и отобразите его в виде предупреждения или чего-либо еще.
Процесс визуализации
let args = "CmdOrCtrl+A"
ipcRenderer.send('set::keycombine',args)
ipcRenderer.on('done::keycombine', (event, arg) => {
// display message to restart the app
})
Основной процесс
ipcMain.on('set::keycombine', (event, arg) => {
console.log(arg) // prints "keycombine"
//setting the new value
store.set('defaultKeyCombination', arg)
// sending reply to renderer work is done
event.reply('done::keycombine')
})
Как только приложение перезапустится, магазин загрузит новую настроенную комбинацию клавиш и зарегистрирует событие быстрого доступа, используя ее.
Это то, что я вспомнил, выполняя это небольшое исследование. Здесь я нашел ключевого слушателя событий под названием iohook , но он доступен только для электрона 2.XX. В вышеописанном процессе могут быть ошибки и проблемы с потоком, я только что опубликовал код, чтобы получить представление.
Редактировать 1:
Это мои примеры. В моем индексе. html Я определил кнопку для вызова функции set (). Вы можете интегрировать поле ввода, чтобы вы могли вводить команды. Как только ключ установлен в хранилище, он всегда загружается с этим новым значением ключа, если пользователь не изменит его. Вы можете прочитать больше о электронном магазине здесь Надеюсь, что это даст вам представление:)
Main. js
const {app, BrowserWindow, ipcMain } = require('electron')
const Store = require('electron-store');
const schema = {
defaultKeyCombination: {
type: 'string',
default: 'CommandOrControl+Y'
}
}
const store = new Store({schema});
console.log(store.get("defaultKeyCombination"))
function createWindow () {
const window = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
window.loadFile('./index.html')
// window.loadURL("https://www.zap.co.il")
window.webContents.openDevTools()
}
ipcMain.on('set::keycombine', (event, arg) => {
console.log(arg) // prints "keycombine"
//setting the new value
store.set('defaultKeyCombination', arg)
// sending reply to renderer work is done with new key
event.reply('done::keycombine', store.get('defaultKeyCombination'))
})
app.whenReady().then(createWindow)
//app.on('ready', createWindow)
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
Renderer. js
const { ipcRenderer } = require('electron')
function set() {
console.log("clicked")
let args = "CmdOrCtrl+A"
ipcRenderer.send('set::keycombine',args)
}
ipcRenderer.on('done::keycombine', (event, arg) => {
console.log("DONEEEEEEEEEE", arg)
})