如何使用Apple Script单击“确定”?

时间:2018-02-07 09:42:45

标签: applescript

我尝试使用弹出窗口选择确定以使用Apple脚本缩放屏幕。

有谁知道我可以添加到此脚本中以允许我单击确定?

Apple Script:

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
    click radio button "Scaled" of radio group 1 of tab group 1
    click radio button 1 of radio group 1 of group 1 of tab group 1

    (* Trying to click the ok button here *)
    delay 1
    click ((pop up buttons of sheet 1 of window 1) whose description is "OK")

end tell

quit application "System Preferences"

enter image description here

或者更确切地说,当我在屏幕上访问时,有人知道一个可信的应用程序,它可以以图形方式打印出UI的标签,这样当我说:&#34时我会知道该使用什么;告诉 UIName "?

感谢。

1 个答案:

答案 0 :(得分:2)

解决方案1:按返回

由于您无论如何都在使用系统事件,并且默认情况下选中了有问题的按钮(以蓝色突出显示),只需确保首选项窗格处于焦点并使用< em>系统事件以点击 return 键:

    tell application "System Events" to keystroke return

它快速,简单,并且省去了在层次结构中识别UI元素的麻烦。缺点是首选项窗格具有焦点,如果它在收到键击之前失去焦点,则脚本的其余部分将失败。

解决方案2:你要求的那个

关于GUI对象层次结构中UI元素的识别,你得到的问题按钮的类及其描述都是错误的。

“OK”按钮的引用方式如下:

    tell application "System Events" to tell process "System Preferences" ¬
        to get button "OK" of sheet 1 of window "Built-in Retina Display"

window 1也没关系)。您可以使用whose过滤器来定位它,这样做(通过系统事件系统偏好设置)过程):

    get buttons of sheet 1 of window 1 whose name is "OK"

但所有这一切都要求AppleScript搜索我们知道其名称的按钮,然后烦人地将结果作为列表返回给我们(通过请求first button of sheet 1...可以展平列表结构。)

但是,我们确实知道它的名字,而且它只有一个,所以我们可以直接引用它。

作为侧边栏,如果您快速运行此命令:

    get the properties of button "OK" of sheet 1 of window "Built-in Retina Display"

你将能够看到它的描述仅仅是“按钮”,这不是你所希望的。现在运行以下命令:

    get the actions of button "OK" of sheet 1 of window "Built-in Retina Display"

显示它有一个可用的操作AXPress(这相当于鼠标点击)。

因此,最后,以比击中返回键更令人满意的方式单击按钮的方式如下所示:

    tell application "System Events" to tell process "System Preferences" ¬
        to tell button "OK" of sheet 1 of window "Built-in Retina Display" ¬
            to perform action "AXPress"

为了在屏幕上浏览GUI对象,我偶尔会使用Apple的 XCode 附带的辅助功能检查器。它有点模糊,虽然不方便地讨论它引用对象的名称和AppleScript所做的名称之间的一些差异(它们也是非常微妙的差异,但足以阻止你的脚本工作并让你陷入狂热几周)。

所以,实际上,我只是在脚本编辑器中以编程方式探索它。

我为解决您的问题所做的是打开相关的窗格和对话框,然后系统地将系统偏好设置过程告诉get UI elements;然后get buttons of UI elements;然后get buttons of UI elements of UI elements,当我看到一对按钮返回时停止,称为“确定”和“取消”。它可能是痛苦的,但它会给你正确的参考。

还有其他方法,但我会超出这个问题的范围。