如何在Applescript中关闭/取消弹出模式/对话框窗口

时间:2016-03-06 21:30:35

标签: macos dialog modal-dialog applescript vlc

我正在尝试修复我在这个Applescript中的特定问题:https://gist.github.com/jwmann/08daed8a905cfbf4ff96

上下文:

这是一个Applescript,您可以在VLC播放列表中选择一首歌曲,运行Applescript,它会将歌曲从原始位置删除。

问题:

当用户尝试删除当前播放的单首歌曲时,会出现问题,其中VLC播放列表的大小仅为单首歌曲。

如果您尝试删除当前正在播放的歌曲,VLC将会爆炸。为了解决这个问题,我让脚本停止播放VLC并再次尝试删除它。

现在,如果这种解决方法发生,VLC将不再播放。在多首歌曲播放列表中,这不会令人讨厌。因此脚本将在脚本结束时继续播放VLC。但是,从单个歌曲播放列表中删除歌曲后,它将从播放列表中删除该歌曲,不留歌曲,因此没有播放列表。

因此,当脚本尝试播放时,它将打开一个新窗口/对话框/模式以允许用户查找要播放的内容。这是我不想发生的事情。

我正在尝试做什么:

我需要一种方法:

  1. 检测正确的窗口
  2. 告诉该窗口关闭
  3. 我收集的信息:

    这是我正在尝试取消的窗口

    Window I'm trying to Cancel

    这是Accessibility Inspector向我展示窗口的数据。

    ArrayList

    我尝试过的事情:

    <AXApplication: “VLC”>
     <AXWindow: “Open Source”>
    
    Attributes:
       AXFocused:  “0”
       AXFullScreen:  “0”
       AXTitle:  “Open Source”
       AXPosition (W):  “x=993 y=276”
       AXGrowArea:  “(null)”
       AXMinimizeButton:  “(null)”
       AXDocument:  “(null)”
       AXSections (W):  “<array of size 1>”
       AXCloseButton:  “(null)”
       AXMain:  “0”
       AXFullScreenButton:  “(null)”
       AXProxy:  “(null)”
       AXDefaultButton:  “<AXButton: “Open”>”
       AXMinimized:  “0”
       AXChildren:  “<array of size 8>”
       AXRole:  “AXWindow”
       AXParent:  “<AXApplication: “VLC”>”
       AXTitleUIElement:  “<AXStaticText>”
       AXCancelButton:  “<AXButton: “Cancel”>”
       AXModal:  “1”
       AXSubrole:  “AXDialog”
       AXZoomButton:  “(null)”
       AXRoleDescription:  “dialog”
       AXSize:  “w=574 h=402”
       AXToolbarButton:  “(null)”
       AXFrame:  “x=993 y=276 w=574 h=402”
       AXIdentifier:  “_NS:40”
    
    Actions:
       AXRaise - raise
    

    在每个例子中,系统事件或VLC(我都试过)似乎无法找到“开源”窗口,即使它在检查器中明显称为“开源”。它不是一张纸,它是一扇窗户。我不明白为什么我不能找到这个窗口。

1 个答案:

答案 0 :(得分:2)

感谢@ l&#39; L&#39; l推荐我的脚本调试器5,它允许以可读的方式查看窗口的数据,甚至提供调用特定元素的代码。

我是如何发现的,我运行了这段代码:

tell application "VLC" to activate
tell application "System Events"
    tell process "VLC"
        set myUI to every UI element
    end tell
end tell

原因在于,即使我知道窗口的名称,Applescript也找不到它,所以我需要一种方法来查看所有内容。

在其中,我发现了这个:

Open Source Window data

如果你看一下这个窗口的元数据,你就会发现它的超级破坏了。 难怪Applescript永远找不到它,它只是一个窗口。

从该列表中,它提供了引用窗口部分的确切代码,包括&#34;取消&#34;按钮。

这是取消我的窗口的代码:

tell application "System Events"
    tell its application process "VLC"
        tell its window "Open Source"
            click button "Cancel"
        end tell
    end tell
end tell

因此,搜索每个UI元素绝对有用,而Script Debugger 5肯定有帮助。