无法在AppleScript中设置可设置的辅助功能属性

时间:2012-05-08 01:53:45

标签: macos applescript accessibility

在阅读问题“Programmatically select text range in TextEdit”后,我很好奇为什么无法在AppleScript中设置 AXSelectedTextRange 属性,即使属性表明它是可设置的。

打开TextEdit文档,键入几行,突出显示部分并运行下面的脚本进行测试。

activate application "TextEdit"
tell application "System Events"
    set attr to attribute "AXSelectedTextRange" of text area 1 of scroll area 1 of window "Untitled" of application process "TextEdit"
    attr's properties -- determine if settable
    set attr's value to {1, 2}
    delay 1
    attr's value
end tell

AppleScript如何处理我误导的辅助功能属性有什么不同吗?

2 个答案:

答案 0 :(得分:4)

因为AppleScript中不存在所请求的类(包含 NSRange [或 CFRange ]对象的 NSValue ) 。 AppleScript中的类列表等于Objective-C中的类 NSArray

另一个例子:

set value of attribute "AXPosition" of window 1 of application process "TextEdit" to {30, 30}

什么都不做,因为值必须是 NSPoint

在AppleScript中获取属性值时,“系统事件”会转换 NSRange NSpoint NSSize NSRect 到包含数字的 NSArray (AppleScript 列表),但是当您想要设置值时,不会将列表转换为这些类型。

  • NSAccessibility Protocol Reference 中:NSAccessibilitySelectedTextRangeAttribute:所选文本的范围(NSValue)。类NSValue可能包含这些类中的对象(NSRange,NSpoint,NSSize或NSRect)

  • Carbon Accessibility Reference 中:kAXSelectedTextRangeAttribute:CFTypeRef:当前所选文本的范围(开始和结束字符位置)。此属性通常是可设置的。该值是编码的CFRange结构。

因此可以使用Objective-C,AppleScriptObjC或任何其他可以使用Cocoa或Carbon API的语言,例如 UI浏览器 - 但不能用于AppleScript。

答案 1 :(得分:-1)

是的。我不知道的确切原因,但几年来许多脚本编写者都提出了同样的问题(来源:macscripter)。似乎即使属性settable设置为true,AXSelectedTextRange属性的值似乎是只读的。