3

阅读问题“<a href="https://stackoverflow.com/questions/10487350/programmatically-select-text-range-in-textedit" title="Programmatically select text range in TextEdit">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 如何处理我缺少的可访问性属性有什么不同吗?

4

2 回答 2

4

因为AppleScript 中不存在请求的类(一个包含类 NSRange [或碳中的 CRange] 的对象NSValue AppleScript 中的类列表等同于 Objective-C 中的NSArray类。

另一个例子:

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

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

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

  • NSAccessibility 协议参考中: NSAccessibilitySelectedTextRangeAttribute :选定文本的范围(NSValue)。NSValue 类可能包含这些类(NSRange、NSpoint、NSSize 或 NSRect)中的一个对象

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

因此,在 Objective-C、AppleScriptObjC 或任何其他可以使用 Cocoa 或 Carbon API 的语言(如UI 浏览器)中是可能的,但在 AppleScript 中则不行。

于 2012-05-09T06:55:30.173 回答
-1

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

于 2012-05-08T12:35:53.257 回答