22 votes

Évitez que les applications volent le focus dans macOS

Comment puis-je empêcher un programme, par exemple Slack, qui peut prendre du temps à charger, de voler le focus une fois qu'il a fini de charger ?

Si je lance Slack, puis change de focus pendant son chargement, le programme vole le focus une fois qu'il a fini de charger. Cela me rend fou.

Y a-t-il un moyen d'empêcher ce comportement ?

0 votes

Je rencontre toujours ce problème en 2021 avec Slack.. La réponse actuelle n'est pas vraiment idéale.

0 votes

@MattPengelly c'est une application Electron, elles font toutes ça.

6voto

Brandon Rader Points 1143

J'ai trouvé quelques options qui devraient couvrir la plupart des applications. L'une de ces options pourrait être utilisée pour créer un flux de travail Automator afin de rendre l'exécution du script plus pratique.

Option 1 : Commande Terminal

La commande open peut être utilisée pour ouvrir une application en utilisant l'option -a. Vous pouvez ajouter l'option -g pour ouvrir l'application sans la mettre au premier plan. Cela ne fonctionne pas pour Slack ou Google Chrome. Je soupçonne que c'est parce qu'ils sont des applications multiplateformes construites différemment et ne sont pas des citoyens macOS parfaits. Cette solution est préférable si elle fonctionne pour l'application désirée.

open -g -a "Microsoft Word"

Option 2 : AppleScript

Vous pouvez utiliser AppleScript pour activer une application et la masquer si elle n'était pas déjà en cours d'exécution. L'application se lancera et volera toujours le focus, mais le script retardera un court laps de temps pour garantir que l'application se lance avant de tenter de la masquer. Ce n'est certainement pas une solution parfaite, mais ça marche.

set appName to "Slack"
-- Vérifier si l'application est en cours d'exécution
set appIsRunning to l'application appName is running
-- Activer l'application
tell l'application appName to activate
if not appIsRunning then
    -- Si l'application n'est pas en cours d'exécution, retarder puis masquer l'application
    delay 1 -- augmenter cette valeur si nécessaire
    tell l'application "Finder" to set visible of process appName to false
else
    -- Si l'application est en cours d'exécution, compter le nombre de fenêtres.
    tell l'application "System Events" to tell le processus appName to set windowCount to count of fenêtres
    -- Si aucune fenêtre n'est ouverte, en ouvrir une nouvelle.
    if windowCount = 0 then
        -- Commande pour ouvrir une fenêtre ici. Je n'ai pas pu en trouver une pour Slack
    end if
end if

Voir cette réponse pour plusieurs commandes pour ouvrir de nouvelles fenêtres si nécessaire.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X