Jedyny sposób, w jaki udało mi się to zrobić bez odbiornika onkeydown
, to skrót globalny i zdarzenia ipc w aplecie Electron.
Najpierw disclaimer ...
Wyłączenie dowolnego klawisza z globalnego skrótu naprawdę nie wyłączyć globalnie na komputerze! PROSZĘ UWAŻAĆ PRZY UŻYCIU GLOBALNYCH SKRÓTÓW! Jeśli zapomnisz wyrejestrować skrót lub nie będziesz go obsługiwać poprawnie, trudno będzie naprawić swój błąd bez backspace!
Powiedział to, co pracował dla mnie ...
const { app, ipcMain,
globalShortcut,
BrowserWindow,
} = require('electron');
app.on('ready',() => {
// Create the browser window
let mainWindow = new BrowserWindow({width: 800, height: 600});
// and load the index.html of the app
mainWindow.loadUrl('file://' + __dirname + '/index.html');
// Register a 'Backspace' shortcut listener when focused on window
mainWindow.on('focus',() => {
if (mainWindow.isFocused()) {
globalShortcut.register('Backspace',() => {
// Provide feedback or logging here
// If you leave this section blank, you will get no
// response when you try the shortcut (i.e. Backspace).
console.log('Backspace was pressed!'); //comment-out or delete when ready.
});
});
});
// ** THE IMPORTANT PART **
// Unregister a 'Backspace' shortcut listener when leaving window.
mainWindow.on('blur',() => {
globalShortcut.unregister('Backspace');
console.log('Backspace is unregistered!'); //comment-out or delete when ready.
});
});
Ewentualnie można dodać skrót wewnątrz IPC „Przełącz” obsługi zdarzenia jak to ...
// In the main process
ipcMain.on('disableKey-toggle', (event, keyToDisable) => {
if (!globalShortcut.isRegistered(keyToDisable){
globalShortcut.register(keyToDisable,() => {
console.log(keyToDisable+' is registered!'); //comment-out or delete when ready.
});
} else {
globalShortcut.unregister(keyToDisable);
console.log(keyToDisable+' is unregistered!'); //comment-out or delete when ready.
}
});
// In the render process send the accelerator of the keyToDisable.
// Here we use the 'Backspace' accelerator.
const { ipcRenderer } = require('electron');
ipcRenderer.send('disableKey-toggle', 'Backspace');
dlaczego chcesz zablokować klawisz Backspace dla całej aplikacji? Możesz po prostu zablokować go w swoim interfejsie/rendererze za pomocą "normalnego" javascriptu, opisanego [tutaj na stackoverflow] (http://stackoverflow.com/a/2768256/1435377) (lub podobnej odpowiedzi poniżej tej odpowiedzi). :) Wiem, że starter tematu zapytał o drogę nodejów ... nadal nie rozumiem dlaczego - ludzie powinni tak po prostu mieć na uwadze ... (: –
Zgadzam się, to zwykle jest najłatwiejszy sposób. to pytanie zadano pytanie, jak to zrobić, używając Electron i * nie * Javascript. Wyobrażam sobie bardziej odpowiedni przypadek użycia: jeśli otworzysz okno inną aplikację lub dialog systemowy, w którym chcesz kontynuować przechwytywanie (nie blokować) klucza -naciśnij. – Josh