AppleScript在条件语句中不生成输出

时间:2018-02-07 23:33:54

标签: applescript

我正在尝试编写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

2 个答案:

答案 0 :(得分:0)

如果我们假设AppleScript正常运行,那么就会得出一个结论:这些菜单或菜单项GUI对象中至少有一个不存在,因此脚本没有任何内容可以返回。

如果条件语句通过 - 并且如果它已通过 - 那么将显示通知4,并且函数menuItemExists将返回true。如果此函数返回true - 并且仅返回,如果它返回true - 则会出现一个对话框,显示消息“hoda”。

但是,没有出现这样的对话框,这意味着menuItemExists没有返回true。如果它未返回true,则必须返回false。如果它返回false,这意味着某些菜单项的存在条件失败,因此不会看到3号后的通知。

我相信即使发生故障,你也期待一些输出。但是,脚本中没有错误,并且返回值的唯一语句都在函数处理程序中。这会将其值(我们现在推断的是布尔值false)返回给调用它的父脚本;并且只有父脚本会返回任何值 - 如果它有一个值返回到您希望显示结果的输出窗口。

如果没有您在我的计算机上使用的应用程序,我就无法确定断言失败的条件子句中的位置。我的建议是单独测试每个对象,从menu bar 1menu 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之前使用truefalse会触发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 代码实际上就像编码一样,虽然它的编码方式除了经过一些测试之外没有任何实际用途,直到它被重新编码为止一个真实世界的用例场景。