5

アプリケーションの[ヘルプ]メニューの[検索]ボックスに焦点を当てたOSX10.5用のスクリプトがあります。キーの組み合わせで使用しており、Spotlightと同様に、スクリプトを実行するときに切り替えたいと考えています。そこで、検索ボックスがすでに入力用にフォーカスされているかどうかを検出したいので、フォーカスされている場合は、[ヘルプ]メニューをクリックする代わりにEscと入力します。

現在のスクリプトは次のとおりです。

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

そして、私はこのようなことを考えています:

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

...しかし、このエラーが発生します:

{アプリケーション「システムイベント」のアプリケーションプロセス「スクリプトエディタ」のメニューバー1のメニューバー項目「ヘルプ」のメニュー「ヘルプ」のメニュー項目1}に焦点を合わせることができません。

では、検索ボックスがすでにフォーカスされているかどうかをスクリプトで検出する方法はありますか?


私はそれを回避することによって私の問題を解決しました。メニュー項目が選択されているかどうかを確認する方法がまだわからないので、このトピックは開いたままにしておきます。

4

5 に答える 5

4

組み込みのキー ショートカットCmd-?( Cmd-Shift-/) は、既にこのように動作します。キー フォーカスがまだフォーカスされていない場合はヘルプ メニューの検索フィールドに移動し、それ以外の場合はメニューを閉じます。

于 2008-09-18T07:03:08.223 に答える
2

/Developer/Applications/Utilities/Accessibility Tools / Accessibility Inspector.appを使用すると、組み込みのアクセシビリティシステムを使用して、マウスの下でUI要素のプロパティを確認できます。要素と[更新]ボタンにフォーカスをロックするためのcmd-F7アクションに特に注意してください。残念ながら、要素名とプロパティ名はスクリプトスイートのものと直接一致しませんが、システムイベントの辞書を確認するか、通常は正しい用語を推測できます。

これを使用して、2つのことを決定できます。まず、focusedプロパティはにありませんが、フォーカスされてmenu itemいるtext field内にあります。menu item次に、メニュー項目にselectedプロパティがあります。

これで、私は思いついた:

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

これはまだ機能しませんが。キーイベントは私が知る限り発生していないのでfocused、テキストフィールドのプロパティで何かがまだひねくれている可能性があります。

とにかく、あなたのclick再び解決策ははるかに簡単に思えます。

于 2008-09-16T04:34:10.847 に答える
2

Illustratorでファイルを処理するために、これを自分で行う必要があることに気づきました。

これが私が思いついたものです:

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

終わり。

これは問題なく機能し、ファイルの繰り返しに使用できました。将来の自動化では、おそらくこれを何度も行う必要があります。

幸運を!

于 2009-10-09T20:22:54.887 に答える