Applescript选择滚动区域中的所有复选框

Applescript选择滚动区域中的所有复选框,applescript,Applescript,我已经用“applescript”和“calendar”自动打印了每周日历。有一个包含复选框集合的滚动区域。如何迭代滚动区域中的每个复选框并取消选中它 这是可行的,但很脆弱,因为行是硬编码的 -- Click the “<fill in title>” checkbox. delay 0.5 set timeoutSeconds to 2.0 set uiScript to "click checkbox 1 of row 2 of outline 1 of scroll area

我已经用“applescript”和“calendar”自动打印了每周日历。有一个包含复选框集合的滚动区域。如何迭代滚动区域中的每个复选框并取消选中它

这是可行的,但很脆弱,因为行是硬编码的

-- Click the “<fill in title>” checkbox.
delay 0.5
set timeoutSeconds to 2.0
set uiScript to "click checkbox 1 of row 2 of outline 1 of scroll area 1 of window \"Print\" of application process \"Calendar\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” checkbox.
delay 1
set timeoutSeconds to 2.0
set uiScript to "click checkbox 1 of row 3 of outline 1 of scroll area 1 of window \"Print\" of application process \"Calendar\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” checkbox.
delay 1
set timeoutSeconds to 2.0
set uiScript to "click checkbox 1 of row 4 of outline 1 of scroll area 1 of window \"Print\" of application process \"Calendar\""
my doWithTimeout(uiScript, timeoutSeconds)
以下示例AppleScript代码是实现在日历应用程序的“打印”对话框的“日历”部分中取消选中所有复选框的目标的一种方法:

-检查日历是否打开,并采取相应措施。 如果运行应用程序日历,则 -日历已打开,但请确保主窗口未显示最小化。 告诉应用程序日历 如果窗口日历不可见,则将窗口日历可见设置为true 激活-向前打开主窗口。 结束语 其他的 -日历未打开,请打开它。 告诉应用程序日历 使活动 -等待主窗口,然后继续。 重复此操作,直到存在窗口日历 延迟0.1 结束重复 结束语 如果结束 -打开“打印”对话框。 使用命令down告诉应用程序系统事件击键p -确保在继续之前显示“打印”对话框。 告诉应用程序日历 重复此操作,直到存在窗口打印 延迟0.1 结束重复 结束语 -取消选中“打印”对话框日历滚动区域中的所有复选框。 告诉应用程序系统事件 告诉应用程序进程日历窗口打印滚动区域1的大纲1 重复从1开始的i以计数行 告诉第一排 如果计数UI元素>0,则 单击复选框1 如果结束 结束语 结束重复 结束语 结束语 注意:示例AppleScript代码仅此而已,不包含任何其他适当的错误处理。用户有责任根据需要添加任何适当的错误处理。请查看中的语句和语句。另见。此外,UI脚本可能需要根据需要或需要使用相应的命令。

以下示例AppleScript代码是实现在日历应用程序的“打印”对话框的“日历”部分中取消选中所有复选框的一种方法:

-检查日历是否打开,并采取相应措施。 如果运行应用程序日历,则 -日历已打开,但请确保主窗口未显示最小化。 告诉应用程序日历 如果窗口日历不可见,则将窗口日历可见设置为true 激活-向前打开主窗口。 结束语 其他的 -日历未打开,请打开它。 告诉应用程序日历 使活动 -等待主窗口,然后继续。 重复此操作,直到存在窗口日历 延迟0.1 结束重复 结束语 如果结束 -打开“打印”对话框。 使用命令down告诉应用程序系统事件击键p -确保在继续之前显示“打印”对话框。 告诉应用程序日历 重复此操作,直到存在窗口打印 延迟0.1 结束重复 结束语 -取消选中“打印”对话框日历滚动区域中的所有复选框。 告诉应用程序系统事件 告诉应用程序进程日历窗口打印滚动区域1的大纲1 重复从1开始的i以计数行 告诉第一排 如果计数UI元素>0,则 单击复选框1 如果结束 结束语 结束重复 结束语 结束语
注意:示例AppleScript代码仅此而已,不包含任何其他适当的错误处理。用户有责任根据需要添加任何适当的错误处理。请查看中的语句和语句。另见。此外,UI脚本可能需要根据需要或需要使用相应的命令。

这对我使用最新版本的macOS Mojave很有效

tell application "Calendar"
    activate
    reopen
end tell
tell application "System Events" to tell application process "Calendar"
    if not (exists of window "Print") then keystroke "p" using command down
    repeat while not (exists of window "Print")
        delay 0.1
    end repeat
    set everyCheckboxRef to a reference to every checkbox of rows of outline 1 ¬
        of scroll area 1 of window 1
    repeat with i from 1 to count of everyCheckboxRef
        set thisCheckbox to item i of everyCheckboxRef
        if value of thisCheckbox is 1 then perform action "AXPress" of thisCheckbox
    end repeat
end tell

这对我使用最新版本的macOS Mojave很有效

tell application "Calendar"
    activate
    reopen
end tell
tell application "System Events" to tell application process "Calendar"
    if not (exists of window "Print") then keystroke "p" using command down
    repeat while not (exists of window "Print")
        delay 0.1
    end repeat
    set everyCheckboxRef to a reference to every checkbox of rows of outline 1 ¬
        of scroll area 1 of window 1
    repeat with i from 1 to count of everyCheckboxRef
        set thisCheckbox to item i of everyCheckboxRef
        if value of thisCheckbox is 1 then perform action "AXPress" of thisCheckbox
    end repeat
end tell

现在,这两种方式都起作用了。顺便说一句,使用。。。对每个复选框的引用。。。比我的示例AppleScript代码快,所以我必须给你一个+1,因为你的代码也值得一个+1。我一直在做大量的研究和阅读关于操作员的参考资料。我仍然在试图把我的头绕在它周围,我必须承认,我仍然经常发现它令人困惑,因为我似乎仍然用这种方法制造了更多的错误,而不是解决方案。LOL。在这种情况下,它似乎对我来说是有意义的。顺便说一句,使用。。。对每个复选框的引用。。。比我的示例AppleScript代码快,所以我必须给你一个+1,因为你的代码也值得一个+1。我已经做了很多了 关于操作员参考的研究和阅读。我仍然在试图把我的头绕在它周围,我必须承认,我仍然发现它更容易混淆,因为我似乎仍然用这种方法制造了更多的错误而不是解决方案,哈哈。这种情况对我来说似乎是有意义的