Dans Applescript, comment puis-je savoir si un élément de menu est sélectionné / ciblé?

StackOverflow https://stackoverflow.com/questions/69030

  •  09-06-2019
  •  | 
  •  

Question

J'ai un script pour OS X 10.5 qui concentre la zone de recherche dans le menu Aide de toute application. Je l’ai sur une combinaison de touches et, tout comme Spotlight, je souhaite qu’elle bascule lorsque je lance le script. Je souhaite donc détecter si le champ de recherche est déjà activé pour la saisie et, le cas échéant, tapez Echap au lieu de cliquer sur le menu Aide.

Voici le script tel qu'il se présente maintenant:

tell application "System Events"
    tell (first process whose frontmost is true)
        set helpMenuItem to menu bar item "Help" of menu bar 1
        click helpMenuItem
    end tell
end tell

Et je pense à quelque chose comme ça:

tell application "System Events"
    tell (first process whose frontmost is true)
        set helpMenuItem to menu bar item "Help" of menu bar 1
        set searchBox to menu item 1 of menu of helpMenuItem
        if (searchBox's focused) = true then
            key code 53 -- type esc
        else
            click helpMenuItem
        end if
    end tell
end tell

... mais j'obtiens cette erreur:

  

Impossible de se concentrer sur {l'élément de menu 1 du menu " Aide " de l'élément de la barre de menu " Aide " de la barre de menus 1 du processus d’application "Script Editor" d'application "Événements système"}.

Y a-t-il moyen de faire en sorte que mon script détecte si le champ de recherche est déjà activé?

J'ai résolu mon problème en solution au problème . Je ne sais toujours pas comment vérifier si un élément de menu est sélectionné, je vais donc laisser ce sujet ouvert.

Était-ce utile?

La solution

À l'aide de / Developer / Applications / Utilitaires / Outils d'accessibilité / Accessibility Inspector.app, vous pouvez utiliser le système d'accessibilité intégré pour consulter les propriétés de l'élément d'interface utilisateur situé sous la souris. Prenez note de l'action cmd-F7 pour verrouiller la mise au point sur un élément et sur le bouton Actualiser. Malheureusement, les noms des éléments et des propriétés ne correspondent pas directement à ceux de la suite de scripts, mais vous pouvez consulter le dictionnaire des événements système ou deviner la bonne terminologie.

En utilisant cela, vous pouvez déterminer deux choses. Tout d'abord, la propriété ne se trouve pas sur l'élément de menu , mais il existe plutôt un champ de texte dans l'élément de menu qui est ciblé. Deuxièmement, l'élément de menu a une propriété selected .

Avec cela, je suis venu avec:

tell application "System Events"
    tell (first process whose frontmost is true)
        set helpMenuItem to menu bar item "Help" of menu bar 1

        -- Use reference form to avoid building intermediate object specifiers, which Accessibility apparently isn't good at resolving after the fact.
        set searchBox to a reference to menu item 1 of menu of helpMenuItem
        set searchField to a reference to text field 1 of searchBox

        if searchField's focused is true then
            key code 53 -- type esc
        else
            click helpMenuItem
        end if
    end tell
end tell

Bien que cela ne fonctionne toujours pas. L'événement clé ne se déclenche pas autant que je peux en juger. Il se peut donc que quelque chose ne soit toujours pas génial avec la propriété située dans le champ de texte.

Quoi qu’il en soit, votre solution cliquez sur semble beaucoup plus simple.

Autres conseils

Le raccourci clavier intégré Cmd -? ( Cmd-Shift - / ) se comporte déjà de cette manière. Il déplace le focus clé vers le champ de recherche du menu d'aide s'il n'est pas déjà ciblé, sinon il ferme le menu.

Vous devez utiliser l'attribut AXMenuItemMarkChar .

Exemple:

tell application "System Events"
    tell process "Cisco Jabber"
        set X to (value of attribute "AXMenuItemMarkChar" of menu item "Available" of menu "Status" of menu item "Status" of menu "File" of menu bar item "File" of menu bar 1) is "✓" -- check if Status is "Availible"    
    end tell
end tell

Si l'option de menu est cochée, la valeur renvoyée est ? , sinon il s'agit de valeur manquante .

Remarque: ce test ne fonctionne que si l'application dont les menus sont inspectés est actuellement au premier plan .

Je viens de rencontrer le besoin de le faire moi-même pour certains traitements de fichiers dans Illustrator.

Voici ce que j'ai créé:

tell application "Adobe Illustrator"
activate
tell application "System Events"
    tell process "Illustrator"
        set frontmost to true
        set activeMenuItem to enabled of menu item "Unlock All" of menu "Object" of menu bar item "Object" of menu bar 1
        if activeMenuItem is true then
            tell me to beep 3
        else
            tell me to beep 2
        end if
    end tell
end tell
end tell

Terminé.

Cela fonctionnait sans problème et pouvait être utilisé pour itérer un fichier. Je devrai probablement le faire plusieurs fois dans ma future automatisation.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top