5

我有一个 OS X 10.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} 的焦点。

那么有没有办法让我的脚本检测搜索框是否已经聚焦?


我通过解决它解决了我的问题。我仍然不知道如何检查是否选择了菜单项,因此我将保留此主题。

4

5 回答 5

4

内置快捷键Cmd-?( Cmd-Shift-/) 的行为已经像这样了。如果尚未获得焦点,它将键焦点移动到帮助菜单的搜索字段,否则关闭菜单。

于 2008-09-18T07:03:08.223 回答
4
于 2016-03-11T19:45:39.013 回答
2

使用 /Developer/Applications/Utilities/Accessibility Tools/Accessibility Inspector.app 您可以使用内置的辅助功能系统查看鼠标下 UI 元素的属性。请特别注意 cmd-F7 操作以将焦点锁定在元素和刷新按钮上。遗憾的是元素和属性名称与脚本套件中的名称不直接匹配,但您可以查看系统事件的字典或通常猜测正确的术语。

使用它,您可以确定两件事。首先,该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 回答
0

This worked for me to toggle between two menu items, based on which one is selected, using the "selected" property:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events" to tell process "System Preferences"
    tell pop up button 2 of tab group 1 of window 1
        click
        delay 0.2
        set appControl to menu item "App Controls" of menu 1
        set fKeys to menu item "F1, F2, etc. Keys" of menu 1
        if selected of appControl is true then
            click fKeys
        else
            click appControl
        end if
    end tell
end tell
于 2021-01-21T21:11:51.960 回答