2 votes

Activer ou désactiver la fonction Ne pas déranger dans une application Applescript (MacOS Catalina)

Je veux activer ou désactiver ( pas ne pas déranger dans une application basée sur Applescript.

Apparemment, il y a était une méthode pour faire cela sur des versions plus anciennes du système d'exploitation (je suis sur Catalina). Aujourd'hui, le seule solution J'ai trouvé un piratage qui utilise un raccourci clavier pour basculer l'état de Ne pas déranger. Cela ne me convient pas car je ne connais pas à l'avance l'état du paramètre avant de lancer l'application et je veux spécifiquement le désactiver lorsque l'application est lancée (je le réactiverai plus tard).

S'il n'existe aucun moyen d'activer ou de désactiver spécifiquement la fonction "Ne pas déranger", je suppose que ce que je dois savoir, c'est comment vérifier l'état actuel du paramètre et n'exécuter le raccourci clavier que s'il n'est pas dans l'état souhaité.

1voto

aanno Points 329

Ce n'est pas aussi élégant que je l'espérais, mais cela semble fonctionner.

Après avoir joué avec la fonction d'enregistrement pendant un certain temps, il semble que je puisse activer le DND lorsqu'il est désactivé :

-- Click the “Notification Center” menu bar item.
delay 1.109957
set timeoutSeconds to 0.0
set uiScript to "click menu bar item \"Notification Center\" of menu bar 1 of application process \"SystemUIServer\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” button.
delay 2.096055
set timeoutSeconds to 0.0
set uiScript to "click UI Element 3 of group \"Do Not Disturb\" of scroll area 1 of window \"Notification Center\" of application process \"Notification Center\""
my doWithTimeout(uiScript, timeoutSeconds)

on doWithTimeout(uiScript, timeoutSeconds)
    set endDate to (current date) + timeoutSeconds
    repeat
        try
            run script "tell application \"System Events\"
" & uiScript & "
end tell"
            exit repeat
        on error errorMessage
            if ((current date) > endDate) then
                error "Can not " & uiScript
            end if
        end try
    end repeat
end doWithTimeout

et vice versa :

-- Click the “Notification Center” menu bar item.
delay 2.508349
set timeoutSeconds to 2.0
set uiScript to "click menu bar item \"Notification Center, Do Not Disturb enabled\" of menu bar 1 of application process \"SystemUIServer\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” button.
delay 1.176098
set timeoutSeconds to 2.0
set uiScript to "click UI Element 3 of group \"Do Not Disturb\" of scroll area 1 of window \"Notification Center\" of application process \"Notification Center\""
my doWithTimeout(uiScript, timeoutSeconds)

on doWithTimeout(uiScript, timeoutSeconds)
    set endDate to (current date) + timeoutSeconds
    repeat
        try
            run script "tell application \"System Events\"
" & uiScript & "
end tell"
            exit repeat
        on error errorMessage
            if ((current date) > endDate) then
                error "Can not " & uiScript
            end if
        end try
    end repeat
end doWithTimeout

Il serait préférable qu'il existe une solution qui vérifie son état ou qui spécifie explicitement le nouvel état souhaité au lieu de simplement basculer. Il y a une petite différence entre les scripts, ce n'est donc pas un problème. exactement mais il fonctionne en cliquant sur le bouton.

1voto

user3439894 Points 52496

En exemple AppleScript code L'appareil, présenté ci-dessous, a été testé sous MacOS Catalina avec Langue et région paramètres en Préférences du système fixé à Anglais (US) - Primaire et a fonctionné pour moi sans problème 1 pour tourner Ne pas déranger soit sur o éteint .

  • 1 Assume la mise en place nécessaire et appropriée dans <strong>Préférences du système </strong>> <strong>Sécurité et vie privée </strong>> <strong>Vie privée </strong>ont été fixés/adressés selon les besoins.

En setDoNoDisturbTo() gestionnaire en prend un paramètre , "On" o "Off" .

Exemple AppleScript code :

my setDoNoDisturbTo("Off")

on setDoNoDisturbTo(OnOff)
    set checkDNDstatusCMD to ¬
        {"defaults -currentHost read", space, ¬
            "~/Library/Preferences/ByHost/", ¬
            "com.apple.notificationcenterui", ¬
            space, "doNotDisturb"} as string
    set statusOfDND to ¬
        (do shell script checkDNDstatusCMD) ¬
            as number as boolean
    if statusOfDND is false and OnOff is "On" then
        set OnOff to true
    else if statusOfDND is true and OnOff is "Off" then
        set OnOff to false
    else
        return
    end if
    set changeDNDstatusCMD to ¬
        {"defaults -currentHost write", space, ¬
            "~/Library/Preferences/ByHost/", ¬
            "com.apple.notificationcenterui", ¬
            space, "doNotDisturb -boolean", space, OnOff, ¬
            space, "&& killall NotificationCenter"} as string
    do shell script changeDNDstatusCMD
end setDoNoDisturbTo

Note : Le <em>exemple </em><strong>AppleScript </strong><em>code </em>n'est que cela et sans aucun élément inclus <em>traitement des erreurs </em>ne contient pas d'éléments supplémentaires <em>traitement des erreurs </em>le cas échéant. Il incombe à l'utilisateur d'ajouter toute <em>traitement des erreurs </em>selon ce qui est approprié, nécessaire ou souhaité. Consultez le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>essayer </strong></a><em>déclaration </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>erreur </strong></a><em>déclaration </em>dans le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guide du langage AppleScript </strong></a>. Voir aussi, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Travailler avec des erreurs </strong></a>. En outre, l'utilisation du <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>délai </strong></a><em>commande </em>peut être nécessaire entre les événements, le cas échéant, par exemple <code>delay 0.5</code> , avec le <em>valeur </em>de la <em>délai </em>de manière appropriée.

0voto

Philip Points 31

Dans Monterey (MacOS 12), vous pouvez utiliser l'application Raccourcis et le bouton Définir l'objectif action.

Il dispose d'options permettant de transformer n'importe lequel des modes de mise au point configurés. Arrêt o Sur jusqu'à diverses conditions de fin, y compris jusqu'à ce qu'il soit éteint.

Ce n'est pas une solution AppleScript, mais j'espère que quelqu'un mettra à jour ou commentera un moyen de déclencher des raccourcis à partir d'AppleScript ou du Terminal.

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