我有一个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的菜单栏项“帮助”的菜单“帮助”的菜单项目1。
那么我有没有办法让我的脚本检测搜索框是否已经聚焦?
我通过working around it解决了我的问题。我仍然不知道如何检查菜单项是否被选中,所以我将打开这个主题。
答案 0 :(得分:4)
内置键快捷键 Cmd - ?( Cmd-Shift - / )的行为就像这样。如果关键焦点尚未聚焦,它会将关键焦点移动到帮助菜单的搜索栏,否则会关闭菜单。
答案 1 :(得分:3)
您需要使用属性AXMenuItemMarkChar
。
示例:
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
如果选中菜单项,则返回值为✓
,否则为missing value
。
注意:此测试仅适用于正在检查其菜单的应用程序当前最前面。
答案 2 :(得分: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
再次解决方案似乎更容易。
答案 3 :(得分:1)
我只是想在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
完成。
这没有问题,可用于迭代文件。在未来的自动化中,我可能不得不多做这件事。
祝你好运!答案 4 :(得分:0)
这对我有用,可以使用“selected”属性在两个菜单项之间切换,基于选择的一个:
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