J'ai une application electron js avec Angular 8. Si l'utilisateur exécute la commande control + w, il ferme automatiquement la fenêtre. J'essaie de parcourir BrowserWindow Api , mais je n'ai pas trouvé de indicateur ou gestionnaire pour empêcher ce comportement de se produire.
3 Réponses :
Vous devez changer ou supprimer le menu d'application par défaut qui a ce raccourci Fenêtre -> Fermer Ctrl + W
par défaut
Menu.setApplicationMenu(null) // remove default application menu // or browserWindow.setMenu(null) // just remove default menu of a specific window and not all windows
Cela devrait faire l'affaire
Documents pertinents:
La suppression du menu d'application par défaut supprime d'autres raccourcis utiles, je suggère donc de cibler spécifiquement Ctrl + W, ce qui peut être fait en utilisant globalShortcut
:
const { app, globalShortcut } = require("electron"); app.on("ready", () => { globalShortcut.register("CommandOrControl+W", () => { //stuff here }); });
Plus d'informations sur ce ici
Les autres méthodes de menu et de navigateur ne fonctionnaient pas pour moi (du moins dans le débogage local), en essayant celle-ci en conjonction avec app.dock.hide () BTW, il manque la fonction de fermeture de register () ')'.
Bien que le raccourci fonctionne, je n'ai pas pu empêcher le comportement par défaut, j'ai fini par utiliser cette solution stackoverflow.com/a/35782702/970375 < / a>
Le problème avec cette solution est qu'elle bloque ce raccourci pour toutes les applications, pas seulement votre application. En outre, vous auriez toujours un élément de menu dans le menu de votre application indiquant qu'il dispose d'un accélérateur "Ctrl + W". Vous pouvez modifier le menu de votre application pour désactiver et masquer cet élément de menu (tout en conservant les autres utiles), imo étant la meilleure solution.
Pour qui cela peut concerner, une autre solution peut être:
app.on("ready", () => { app.on("browser-window-focus", () => { globalShortcut.registerAll( ["CommandOrControl+R"], () => { return; } ); }); app.on("browser-window-blur", () => { globalShortcut.unregisterAll(); }); });
De cette façon, nous évitons de bloquer globalShortcuts dans d'autres applications. Plus d'informations sur les accélérateurs d'électrons: https://www.electronjs.org/docs/api/accelerator
Ce serait un problème majeur de convivialité si les sites Web pouvaient empêcher les utilisateurs de les fermer. Même s'il ne s'agit que d'une combinaison de touches, ils bloquent, car certains utilisateurs utilisent en fait ces combinaisons de touches à la place de leur souris. Il en va de même pour les applications de bureau.
C’est un excellent point sur la convivialité. La convivialité que je recherche est similaire à VSCode, en ce sens qu'il comporte des onglets, et je veux que l'utilisateur puisse fermer les onglets avec control + w, et quand il arrive au dernier, il ferme la fenêtre.
L'une des questions répertoriées comme liées est la suivante: stackoverflow.com/questions/59392806/... . Pouvez-vous vérifier si la solution qui y est répertoriée fonctionne réellement?