我正在尝试编写AppleScript,告诉应用程序是否有特定的菜单栏项。我在互联网上找到了这个片段,并尝试运行,但它不会产生任何影响。我已经拼接了一些调试语句来检查控制流程,似乎根本不输入条件'if'。
没有错误信息,没有输出,没有!
on menuItemExists({appName, menuName1, menuItem1})
display notification "1"
tell application "System Events"
display notification "2"
tell application process appName
display notification "3"
if menu item menuItem1 of menu 1 of menu bar item menuName1 of menu bar 1 exists then
display notification "4"
return true
else
return false
end if
end tell
display notification "5"
end tell
end menuItemExists
if menuItemExists({"timeEdition", "Extras", "Start Recording"}) then
display dialog "hoda"
end if
答案 0 :(得分:0)
如果我们假设AppleScript正常运行,那么就会得出一个结论:这些菜单或菜单项GUI对象中至少有一个不存在,因此脚本没有任何内容可以返回。
如果条件语句通过 - 并且仅如果它已通过 - 那么将显示通知4,并且函数menuItemExists
将返回true
。如果此函数返回true
- 并且仅返回,如果它返回true
- 则会出现一个对话框,显示消息“hoda”。
但是,没有出现这样的对话框,这意味着menuItemExists
没有返回true
。如果它未返回true
,则必须返回false
。如果它返回false
,这意味着某些菜单项的存在条件失败,因此不会看到3号后的通知。
我相信即使发生故障,你也期待一些输出。但是,脚本中没有错误,并且返回值的唯一语句都在函数处理程序中。这会将其值(我们现在推断的是布尔值false
)返回给调用它的父脚本;并且只有父脚本会返回任何值 - 如果它有一个值返回到您希望显示结果的输出窗口。
如果没有您在我的计算机上使用的应用程序,我就无法确定断言失败的条件子句中的位置。我的建议是单独测试每个对象,从menu bar 1
到menu item
,我相信罪魁祸首会出现。
答案 1 :(得分:0)
OP中的 AppleScript 代码仅返回true
,并且当且仅当 timeEdition <时触发display dialog "hoda"
/ strong>正在运行且未主动录制。当它正在主动录制菜单时显示Stop Recording
。如果 timeEdition 未运行,您可以将tell application "timeEdition" to activate
添加到脚本顶部,如果您希望处理程序生成true
并显示“ hoda“在对话框中运行时没有主动录制。
display notification "5"
永远不会触发,因为在return
之前使用true
和false
会触发false
。
我安装了 timeEdition 并在您的OP中测试了 AppleScript 代码,它确实在脚本编辑器中返回display dialog "hoda"
如果它没有运行。如果正在运行且未主动录制,则会触发<xs:element name="FirstName" nillable="true" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="28"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
。
所以,OP中的 AppleScript 代码实际上就像编码一样,虽然它的编码方式除了经过一些测试之外没有任何实际用途,直到它被重新编码为止一个真实世界的用例场景。