AppleScript的;无法获取窗口

时间:2018-01-26 21:11:03

标签: outlook applescript

我正在尝试检查并报告Mac上的Microsoft Outlook窗口(v 15.41)的大小。我知道窗口包含一个滚动视图和一个webarea。

tell application "System Events"
        tell process "Microsoft Outlook"
            set position of the front window to {10, 10}
            set size of the front window to {1366, 768}
            set i to entire contents of the front window
        end tell
    end tell

尽管窗口肯定有子控件,但上面的内容放在结果窗口{}中。

有趣的是,在运行该applescript命令后,MS Outlook窗口似乎崩溃了。如果我尝试检查窗口的已知子项,窗口立即关闭然后我收到一个错误,表明子元素不存在。如果我尝试使用' bounds'窗口崩溃,而不是显式的大小和位置命令。真的很有趣的是,如果我使用辅助功能检查器,并尝试使用鼠标光标来识别窗口部分,如果我将鼠标光标悬停在拆分组/窗口本身上它会崩溃(但窗口底部的滚动区域不会崩溃) 。我想知道这是否是一个权限问题?

这是一个难以复制的问题。我有两个运行相同操作系统版本的mac,一个可以访问窗口内容并检查前窗的孩子,一个不能。两者都在相同版本的OSX上运行相同版本的Outlook。

更新: 我能够识别在尝试检查窗口的子元素时发生的错误 https://pastebin.com/5v4jM5aV 我还使用了最新的MS,Outlook 16.9

我现在90%确定这与权限有关。我有三台机器,其中两台表现出这种行为。没有的是在10.13.3上的2014 Mac,我每次都升级了操作系统。另外两台是全新安装的10.13.3全新机器,所有机器都运行Outloook 16.9

更新2: 在不同的mac mini上全新安装OSX似乎解决了最初的AppleScript问题。但是我看到了screencapture实用程序的奇怪行为。查看附件。 enter image description here

1 个答案:

答案 0 :(得分:0)

这适用于我使用最新版本的Sierra和Outlook v.15.13.3

property theBounds : {10, 10, 1366, 768}
property uiElems : {}

tell application "Microsoft Outlook"
    set bounds of every window to theBounds
    my getEntireContents()
end tell

on getEntireContents()
    activate application "Microsoft Outlook"
    delay 0.5
    tell application "System Events"
        tell front window of application process "Microsoft Outlook"
            set uiElems to entire contents
        end tell
    end tell
end getEntireContents

这里有一些与代码不同的旋转...如果Microsoft Outlook打开了多个窗口,此版本将允许您选择(从打开的窗口列表中),运行脚本操作的窗口。 / p>

global resultValue
property theBounds : {10, 10, 1366, 768}
property windowNames : {}
property uiElems : {}

tell application "Microsoft Outlook"
    set windowNames to name of every window
    my chooseFromList()
    try
        set bounds of window (item 1 of resultValue) to theBounds
    end try
    my getEntireContents()
end tell

on getEntireContents()
    activate application "Microsoft Outlook"
    delay 0.5
    tell application "System Events"
        tell front window of application process "Microsoft Outlook"
            set uiElems to entire contents
        end tell
    end tell
end getEntireContents

on chooseFromList()
    set resultValue to choose from list windowNames ¬
        with title ¬
        "Choose Window To Process" with prompt ¬
        "You want the UI elements of which window?" OK button name ¬
        "OK" cancel button name ¬
        "CANCEL" without empty selection allowed
end chooseFromList