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 AXSelectedTextRange属性が設定可能であることをプロパティが示しているにもかかわらず、AppleScript で設定できない理由が気になります。

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

要求されたクラス (クラスNSRange [またはCarbon のCFRange ]のオブジェクトを含むNSValue ) が AppleScript に存在しないためです。AppleScriptのクラスリストは、Objective-CのクラスNSArrayと同じです。

もう一つの例:

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

値はNSPointでなければならないため、何もしません。

AppleScript で属性値を取得する場合、「System Events」はNSRangeNSpointNSSizeまたはNSRectを数値を含むNSArray (AppleScript list ) に変換しますが、値を設定するときにリストをこれらの型に変換しません。

  • NSAccessibility Protocol Reference : NSAccessibilitySelectedTextRangeAttribute : 選択されたテキストの範囲 (NSValue)。クラス NSValue には、これらのクラス (NSRange、NSpoint、NSSize、または NSRect) の中のオブジェクトが含まれる場合があります。

  • Carbon Accessibility Reference : kAXSelectedTextRangeAttribute : CFTypeRef : 現在選択されているテキストの範囲 (開始および終了文字位置) 。通常、この属性は設定可能です。値はエンコードされた CFRange 構造体です。

したがって、Objective-C、AppleScriptObjC、またはUI Browserなどの Cocoa または Carbon API を使用できるその他の言語では可能ですが、AppleScript では可能ではありません。

于 2012-05-09T06:55:30.173 に答える
-1

はいあります。正確な理由はわかりませんが、数年間、多くのスクリプターが同じ質問をしました (出典:macscripter)。プロパティ settable が true に設定されていても、AXSelectedTextRange 属性の値は読み取り専用のようです。

于 2012-05-08T12:35:53.257 に答える