Domanda

Ho uno script per OS X 10.5 che si concentra la casella di Ricerca nel menu di Aiuto di qualsiasi applicazione.Ce l'ho su una combinazione di tasti e, molto simile a Spotlight, voglio passare quando ho eseguito lo script.Quindi, voglio rilevare se la casella di ricerca è già concentrato per la digitazione e, in caso affermativo, tipo di Esc invece di fare clic sul menu Aiuto.

Questo è lo script così com'è ora:

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

E sto pensando a qualcosa di simile a questo:

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

...ma mi da questo errore:

Non è possibile ottenere concentrato di {voce di menu 1 menu "Aiuto" della barra dei menu la voce "Aiuto" della barra dei menu 1 del processo di applicazione "Script Editor" di applicazione "Eventi di Sistema"}.

Quindi, c'è un modo che posso ottenere il mio script per rilevare se la casella di ricerca è già concentrato?


Ho risolto il mio problema lavorare intorno ad esso.Ancora non so come controllare se una voce di menu viene selezionata anche se, così lascio questo topic aperto.

È stato utile?

Soluzione

Utilizzando /Developer/Applications/Utilities/Accessibilità Strumenti/Impostazioni Accessibilità.app è possibile utilizzare il built-in sistema dell'accessibilità a guardare le proprietà dell'elemento dell'interfaccia utente sotto il mouse.Prendere nota speciale di cmd-F7 azione per bloccare la messa a fuoco di un elemento e il pulsante di Aggiornamento.Purtroppo l'elemento e struttura nomi non corrispondono a quelli in script suite, ma si può guardare il dizionario per gli Eventi di Sistema o di solito indovinare la giusta terminologia.

Utilizzando questa opzione, è possibile determinare due cose.Primo, il focused la struttura non è in menu item, ma , piuttosto, c'è un text field entro il menu item che è a fuoco.Secondo, la voce di menu ha una selected proprietà.

Con questo, mi è venuta:

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

Se questo ancora non funziona.L'evento chiave non spara per quanto posso dire, quindi qualcosa potrebbe ancora essere hinky con il focused proprietà del campo di testo.

In ogni caso, il click di nuovo la soluzione sembra molto più facile.

Altri suggerimenti

Il costruito nel tasto di scelta rapida Cmd-? (Cmd-Shift-/ già si comporta come tale.Si muove chiave di messa a fuoco per il menu di aiuto al campo di ricerca, se non è già concentrato, altrimenti respinge il menu.

È necessario utilizzare l'attributo AXMenuItemMarkChar.

Esempio:

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

Se la voce di menu è selezionata, il valore di ritorno è , altrimenti è missing value.

Nota:Questo test funziona solo se l'applicazione di cui menu sono in ispezionato, è attualmente in primo piano.

Ho appena imbattuto il bisogno di fare da solo per alcuni l'elaborazione dei file in Illustrator.

Ecco cosa mi è venuto fuori:

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

Fatto.

Questo ha funzionato senza alcun problema e può essere utilizzato per scorrere un file.Io probabilmente hanno a che fare più volte nel mio futuro di automazione.

Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top