【问题标题】:Bypass “Can't get window” error in AppleScript绕过 AppleScript 中的“无法获取窗口”错误
【发布时间】:2014-11-16 06:49:03
【问题描述】:

我正在尝试制作一个 bash 脚本来关闭某些查找器窗口(我在 MacOSX 上)。不幸的是,一旦发现第一个窗口未打开,脚本就会终止。 (例如:没有打开标题为“通信”的窗口,但打开了“编辑器”窗口;没有关闭窗口)。如果我打开一个名为 Communication 的窗口,它会关闭,但在第一个命令失败后什么也没有。我试过退出并出错,并取出“set -e”,但似乎没有任何效果。这是我的脚本:

#!/bin/bash
set -e
osascript <<EOF
tell application "Finder"
  close window "Communication"
  close window "Editors"
  close window "Gaming"
  close window "Music"
  close window "Technical"
  close window "Text Editors"
  close window "Utilites"
  close window "Camera"
  close window "External"
  close window "TAB Actual"
end tell

它给了我

error: 24:57: execution error: Finder got an error: Can't get window <"first window found to not be open">. (-1728) (1)

我不知道这是否意味着什么,但代码正在通过 Automator 运行。

感谢任何可以帮助我的人,是的,我对 bash 很陌生。

【问题讨论】:

  • 如果可能的话,也许可以找到一种方法来检测窗口何时打开,并在空白时间后单独关闭打开的窗口?
  • 欢迎来到 bash!不太熟悉 OSX,但从 bash 的角度来看,我建议你 1)从 iterm 或其他东西运行它,这样你就可以看到发生了什么 2)将 set -x 添加到你的脚本中 - 这将打印出很多有用的调试包括你的东西已经走了多远的信息 3)
  • 这是一个 AppleScript,而不是 bash 问题。 Bash 只运行一个命令 - osascript - 所以当 osascript 错误时它会做什么是无关紧要的。问题是当任何close window 语句失败时osascript 停止,因此您需要修复它。
  • @fquinner 谢谢,我觉得很受欢迎!
  • @MarkReed 哦,那我听起来很愚蠢

标签: applescript osascript


【解决方案1】:

您可以使用ignoring application responses 语句,例如:

#!/bin/bash
set -e
osascript <<EOF
tell application "Finder"
  ignoring application responses
    close window "Communication"
    close window "Editors"
    # More windows here...
  end ignoring
end tell

Applescript 语言指南中有关控制语句的更多详细信息:https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html

【讨论】:

  • 酷!在这种情况下,习惯上接受答案。 :-)
【解决方案2】:

这就是 try 语句的用途:

set windowNames to {"Communication", "Editors", "Gaming"}

tell application "Finder"
    repeat with wName in windowNames
        try
            close window wName
        end try
    end repeat
end tell

【讨论】:

  • 我也试过你的,效果很好。谢谢!
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2022-12-29
  • 2016-01-29
  • 2019-07-15
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多