Freigeben über


Wie Benutzeroberflächenautomatisierung eingebettete Objekte verfügbar macht

In diesem Thema wird beschrieben, wie Microsoft Benutzeroberflächenautomatisierung die Steuerelementmuster Text und TextRange verwendet, um eingebettete Objekte (untergeordnete/untergeordnete Elemente) in einem Textdokument oder Container verfügbar zu machen.

Für Benutzeroberflächenautomatisierung ist ein eingebettetes Objekt ein beliebiges Element, das keine Textgrenzen aufweist, z. B. ein Bild, ein Link, eine Tabelle oder ein Dokumenttyp (Microsoft Excel-Tabelle, Microsoft Windows Media-Datei usw.).

Hinweis

Dies unterscheidet sich von der OLE-Definition des Komponentenobjektmodells (COM) (siehe Eingebettete Objekte), bei der ein Element in einer Anwendung erstellt und in eine andere Anwendung eingebettet oder verknüpft wird. Ob das Objekt in seiner ursprünglichen Anwendung bearbeitet werden kann, ist im Kontext von Benutzeroberflächenautomatisierung irrelevant.

Eingebettete Objekte und die Benutzeroberflächenautomatisierungs-Struktur

Eingebettete Objekte werden als einzelne Elemente in der Steuerelementansicht der Benutzeroberflächenautomatisierung-Struktur behandelt. Sie werden als untergeordnete Elemente des Textcontainers verfügbar gemacht, sodass auf sie über das gleiche Objektmodell wie andere Steuerelemente in Benutzeroberflächenautomatisierung zugegriffen werden kann.

In der folgenden Tabelle sind Beispiele für Container- und Nicht-Container-Elemente aufgeführt.

Containerelemente

Nicht-Container-Elemente

  • Kalender
  • Combobox
  • DataGrid
  • Dokument
  • Bearbeiten
  • Group
  • Header
  • HeaderItem
  • List
  • Menü
  • MenuBar
  • Bereich
  • SplitButton
  • Registerkarte
  • Tabelle
  • Symbolleiste
  • Struktur
  • TreeItem
  • Fenster
  • Link
  • Kontrollkästchen
  • Taste

Die folgende Abbildung zeigt einen Textcontainer (Dokument) mit einer eingebetteten Tabelle und einem eingebetteten Bild.

Abbildung eines Dokuments mit einer eingebetteten Tabelle und einem eingebetteten Bild

Die Benutzeroberflächenautomatisierung Inhaltsansicht des vorherigen Dokuments ist im folgenden Diagramm dargestellt.

Diagramm der Benutzeroberflächenautomatisierungs-Inhaltsansicht eines Dokuments mit eingebetteten Objekten

"Kompatible" und "nicht kompatible" eingebettete Objekte

Einige Benutzeroberflächenautomatisierung Anbieter verwenden denselben Textspeicher für jedes TextPattern-Objekt, das sie enthalten. Objekte, die durch denselben Textspeicher wie ihr Container unterstützt werden, werden als "kompatible" eingebettete Objekte bezeichnet. Bei diesen Objekten kann es sich um TextPattern-Objekte selbst handeln, und in diesem Fall sind ihre Textbereiche mit Textbereichen vergleichbar, die aus ihrem Container abgerufen werden. Dadurch können die Anbieter Clientinformationen zu den einzelnen TextPattern-Objekten verfügbar machen, als wären sie ein großer Textanbieter.

Anbieter können jedoch unterschiedliche Textspeicher für verschiedene TextPattern-Objekte verwenden, die in einen TextPattern-Container eingebettet sind. Objekte, die nicht vom Textspeicher des Containers unterstützt werden, werden als "nicht kompatible" eingebettete Objekte bezeichnet. Bei diesen Typen eingebetteter Objekte kann es sich um TextPattern-basierte Objekte handeln.

In der folgenden Tabelle sind einige Beispiele für kompatible und nicht kompatible eingebettete Objekte aufgeführt.

erzwingen Kompatible eingebettete Objekte Nicht kompatible eingebettete Objekte
Eingebettete Objekte ohne TextPattern Schaltfläche in Microsoft Edge
Datentabelle in Microsoft Edge
Schaltfläche in RichTextBlock im XAML-Framework von Microsoft
Bilder mit Alternativtext in Microsoft Edge
ListView mit ListItems in RichTextBlock im XAML-Framework von Microsoft
Eingebettete TextPattern-Objekte Eingabesteuerelement vom Typ "text" in Microsoft Edge
Tabelle in einem Word-Dokument
TextBox-Element in einem Microsoft Word-Dokument

Verfügbarmachen eingebetteter Objekte

Die Text- und TextRange-Steuerelementmuster machen Eigenschaften und Methoden verfügbar, die die Navigation und Abfrage eingebetteter Objekte erleichtern.

Der Textinhalt (oder innere Text) eines Textcontainers und ein eingebettetes Objekt, z. B. ein Link oder eine Tabellenzelle, werden in der Steuerelementansicht und der Inhaltsansicht der Struktur für die Benutzeroberflächenautomatisierung als einzelner, kontinuierlicher Textstream verfügbar gemacht. Objektgrenzen werden dabei ignoriert. Wenn ein Benutzeroberflächenautomatisierung Client den Text zum Rezitieren, Interpretieren oder Analysieren auf irgendeine Weise abruft, sollte der Textbereich auf Sonderfälle überprüft werden, z. B. auf eine Tabelle mit Textinhalt oder andere eingebettete Objekte. Rufen Sie IUIAutomationTextRange::GetChildren auf, um eine IUIAutomationElement-Schnittstelle für jedes eingebettete Objekt zu erhalten, und rufen Sie dann IUIAutomationTextPattern::RangeFromChild auf, um einen Textbereich für jedes Element abzurufen. Dies wird rekursiv ausgeführt, bis der gesamte Textinhalt abgerufen wurde.

Hinweis

In einem degenerierten (oder reduzierten) Bereich sind der Startendpunkt und der Endendpunkt identisch. Degenerate Bereiche werden häufig verwendet, um die Position des Textcursors über die Methoden ITextProviderGetSelection und GetCaretRange anzugeben.

Das folgende Diagramm zeigt einen Textstream mit eingebetteten Objekten und deren Bereichsspannen.

Diagramm eines Textstreams mit eingebetteten Objekten und deren Bereichsspannen

Eingebettete Objekte und TextUnit

Ein ITextProvider-Objekt kann und von einer angegebenen TextUnit durchlaufen werden. Anbieter, die eingebettete Objekte enthalten, können auf die gleiche Weise durchlaufen werden, aber eingebettete Objekte wirken sich auf den Durchlauf aus. Hier sind einige Punkte, die Sie beachten müssen:

  • Jedes nicht kompatible eingebettete Objekt wird durch das Ersetzungszeichen U+FFFC im Textspeicher des Containerelements TextPattern dargestellt. Es wird auch sowohl als Zeicheneinheit als auch als Worteinheit betrachtet.
  • Kompatible eingebettete Objekte können aus mehreren Zeichen und Wörtern bestehen.
  • Das einschließende Element ist das unterste Element, das sich über den gesamten Textbereich erstreckt.
  • Untergeordnete Elemente eines Bereichs sind auch untergeordnete Elemente eines Containerelements, das teilweise oder vollständig innerhalb des Bereichs eingeschlossen ist.
  • Im Idealfall (insbesondere bei Containerelementen wie Table) geht eine Wortgrenze nicht über die Objektgrenze hinaus. Im folgenden Beispiel enthält die Worteinheit "Bar" keine Textposition, die sich außerhalb des </td> Tags befindet (<br \> ist nicht Teil des Worts "Bar").
<table style="width:100%">
  <tr>
    <th>Name</th>
    <th>Notes</th>
  </tr>
  <tr>
    <td>Eve Jackson</td>
    <td>Foo Bar</td>
  </tr>
</table>
<br/>
  • Im Allgemeinen wird als einzelnes Wort so behandelt, <br \> dass es eine Liniengrenze nicht überschreitet.
  • Eine Ausnahme von der vorherigen Regel ist, wenn eine Word Texteinheit vollständige Objekte in sich selbst enthält. Beispiel: <p>Hello <a href="#">link</a> here.</p>, die Inlinecontainer enthält, hat die Wörter "Hello ", "link" und "here". Dabei verfügt "link" über ein TextPattern-Objekt als einschließendes Element und ein Linkobjekt als untergeordnetes Element.
  • Im Fall von Character-Einheiten ist das Objekt das einschließende Element (Texteinheiten wie diese sollten keine untergeordneten Elemente haben).
  • Anmerkungsobjekte sollten nicht als eingebettetes Objekt dargestellt werden. Beispiel: Das Vorhandensein anderer Autorspezifizierer in einem gemeinsam erstellten Dokument.
  • Eingebettete Objekte nehmen mindestens eine Cursorposition ein, Anmerkung ist nur Metadaten.
  • Jede Objektgrenze (Anfang und Ende) wird durch einen Formatwechsel im TextPattern-Dokumentbereich dargestellt.
  • Bei HTML führt jedes HTML-Tag nicht unbedingt zu einem Benutzeroberflächenautomatisierung-Objekt. Beispielsweise müssen Inhalte in Hervorhebungstags nicht als Element, sondern als Textstream dargestellt werden, wobei UIA_IsItalicAttributeId TRUE zurückgibt.
  • Der Startendpunkt ist inklusiver Endpunkt und der bevorzugte Endpunkt, während der Endendpunkt exklusiv ist. Dies ist nützlich, wenn der Bereich degeneriert ist und die Endpunkte Start und Ende für diesen Bereich an derselben Position liegen.

Vergleichen eingebetteter Objekte

Geschachtelte TextPattern-Objekte, die sich in einer ähnlichen untergeordneten Beziehung befinden und denselben Hintergrundtextspeicher verwenden, werden als vergleichbar bezeichnet. In diesem Fall können Bereiche aus einem der TextPattern-Objekte mit ITextRangeProvider::Compare und ITextRangeProvider::CompareEndpoints verglichen werden. Beide führen zu einem gültigen numerischen Wert, der ihre relative Position angibt.

Ein Nicht-TextPattern-Objekt, das in ein TextPattern-Objekt eingebettet ist, ist mit textPattern vergleichbar, wenn das Objekt einen gültigen Bereich in TextPattern (ITextProvider::RangeFromChild) aufweist und der Inhalt hinter dem Textbereich nicht leer und kein Ersatzzeichen ist.

Eingebettete TextPattern-Objekte und document TextUnit

Bei eingebetteten TextPattern-Objekten erkennt die Document-Einheit nur den Inhalt, der in diesem Element enthalten ist.

Word TextPattern-Elementhierarchie

  • Das document-Element implementiert TextPattern, und Document gibt den gesamten Word Dokumentbereich zurück.
  • Einzelne Seiten des Dokuments implementieren TextPattern, und Document gibt den Inhalt dieser einzelnen Seiten zurück (obwohl die Seiten denselben Textspeicher wie das gesamte Dokument TextPattern verwenden).

Steuerelemente für die Webseiten- und Texteingabe in Edge

  • Das Standard Web-Pane-Element implementiert TextPattern und macht den gesamten Webseiteninhalt verfügbar.
  • Einzelne Texteingabesteuerelemente unterstützen TextPattern, wobei ein Dokumentbereich den Text darstellt, der in jedem Eingabefeld enthalten ist (obwohl sie denselben Textspeicher wie die gesamte Webseite verwenden).

Häufige Szenarios

Dieser Abschnitt enthält Beispiele für gängige Szenarien mit eingebetteten Objekten: Hyperlinks, Bilder und Tabellen. In den folgenden Beispielen stellt die linke Klammer ({) den Startendpunkt des Textbereichs und die rechte geschweifte Klammer (}) den Endpunkt End dar.

Der folgende Textbereich enthält einen eingebetteten Textlink.

{Die URL https://www.microsoft.com ist in Text eingebettet}.

Das Aufrufen der Methoden IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren und IUIAutomationTextPattern::RangeFromChild führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationTextRange::GetText Gibt die Zeichenfolge "Die URL https://www.microsoft.com ist in Text eingebettet" zurück.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierung Element zurück, das den Textbereich umschließt, in diesem Fall das Automation-Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::GetChildren Gibt ein Benutzeroberflächenautomatisierung-Element zurück, das das Hyperlink-Steuerelement darstellt.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierung-Element von der vorherigen IUIAutomationTextRange::GetChildren-Methode zurückgegeben wurde. Gibt den Bereich zurück, der "https://www.microsoft.com"" darstellt.

Der folgende Textbereich umfasst teilweise einen eingebetteten Textlink.

Die URL https://{www} ist in Text eingebettet.

Das Aufrufen der Methoden IUIAutomationTextRange::GetText, GetEnclosingElement und GetChildren führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationTextRange::GetText Gibt die Zeichenfolge „www“ zurück.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierung Element zurück, das den Textbereich umschließt; in diesem Fall das Hyperlinksteuerelement.
IUIAutomationTextRange::GetChildren Gibt NULL zurück, da sich der Textbereich nicht über die gesamte URL-Zeichenfolge erstreckt.

Der folgende Textbereich umfasst teilweise den Inhalt eines Textcontainers. Der Textcontainer enthält einen eingebetteten Textlink, der nicht im Textbereich enthalten ist.

{Die URL} https://www.microsoft.com ist in Text eingebettet.

Das Aufrufen der Methoden IUIAutomationTextRange::GetText, GetEnclosingElement und Move führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationTextRange::GetText Gibt die Zeichenfolge „Die URL“ zurück.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierung Element zurück, das den Textbereich umschließt, in diesem Fall das Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::Move Verschiebt die Textbereichsspanne in "https://", da der Text des Links aus einzelnen Wörtern besteht. In diesem Fall wird der Link nicht als einzelnes Objekt behandelt.
Die URL {http} ist in den Text eingebettet.

Bild Beispiel 1: Ein Textbereich, der ein eingebettetes Bild enthält

Der folgende Textbereich enthält ein eingebettetes Bild eines Shuttles.

{Die Abbildung eines Shuttles ist in Text eingebettet}.

Das Aufrufen der Methoden IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren und IUIAutomationTextPattern::RangeFromChild führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationTextRange::GetText Gibt die Zeichenfolge "Das Bild ist in Text eingebettet" zurück. Alt-Text, der dem Bild zugeordnet ist, ist nicht im Textstream enthalten.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierung Element zurück, das den Textbereich umschließt, in diesem Fall das Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::GetChildren Gibt ein Benutzeroberflächenautomatisierung-Element zurück, das das Bildsteuerelement darstellt.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierung-Element von der vorherigen IUIAutomationTextRange::GetChildren-Methode zurückgegeben wurde. Gibt den entarteten Bereich zurück.

Abbildung Beispiel 2: Ein Textbereich, der sich teilweise über den Inhalt eines Textcontainers erstreckt

Der folgende Textbereich umfasst teilweise den Inhalt eines Textcontainers. Der Textcontainer enthält ein eingebettetes Bild, das nicht im Textbereich enthalten ist.

{Das Bild} Abbildung eines Shuttles ist in Text eingebettet.

Das Aufrufen der Methoden IUIAutomationTextRange::GetText, GetEnclosingElement und Move führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationTextRange::GetText Gibt die Zeichenfolge „Das Bild“ zurück.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierung Element zurück, das den Textbereich umschließt, in diesem Fall das Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::Move mit Parametern von (TextUnit_Word, 2). Verschiebt den Textbereichsabschnitt nach „ist“. Da nur textbasierte eingebettete Objekte als Teil des Textstreams betrachtet werden, wirkt sich das Bild in diesem Beispiel nicht auf IUIAutomationTextRange::Move oder den Rückgabewert aus, in diesem Fall 2.

Tabelle

Tabelle Beispiel 1: Ruft den Textcontainer aus dem Inhalt einer Zelle ab.

In der folgenden Tabelle wird der Textcontainer aus dem Inhalt einer Zelle abgerufen.

Zelle mit Bild Zelle mit Text
Abbildung eines Shuttles X
Abbildung des Weltraums und eines Teleskops J
Abbildung eines Mikroskops Z

Das Aufrufen der Methoden IUIAutomationGridPattern::GetItem, IUIAutomationTextPattern::RangeFromChild und IUIAutomationTextRange::GetEnclosingElement führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationGridPattern::GetItem mit Parametern (0, 0). Gibt das Benutzeroberflächenautomatisierung Element zurück, das den Inhalt der Tabellenzelle darstellt. In diesem Fall ist das Element ein Textsteuerelement.
iuiautomationtextpattern::rangefromchild gibt den Bereich der Abbildungsabbildung eines Shuttles zurück.
GetEnclosingElement für das Objekt, das von der vorherigen IUIAutomationTextPattern::RangeFromChild-Methode zurückgegeben wurde. Gibt das Benutzeroberflächenautomatisierung-Element zurück, das die Tabellenzelle darstellt. In diesem Fall ist das Element ein Textsteuerelement, das das TableItem-Steuerelementmuster unterstützt.
IUIAutomationTextRange::GetEnclosingElement für das Objekt, das von der vorherigen GetEnclosingElement-Methode zurückgegeben wurde. Gibt das Benutzeroberflächenautomatisierung-Element zurück, das die Tabelle darstellt.
IUIAutomationTextRange::GetEnclosingElement für das Objekt, das von der vorherigen GetEnclosingElement-Methode zurückgegeben wurde. Gibt das Benutzeroberflächenautomatisierung-Element zurück, das den Textanbieter selbst darstellt.

Tabelle Beispiel 2: Ruft den Textinhalt einer Zelle ab

Die Tabelle im vorherigen Beispiel ruft den Textinhalt einer Zelle ab.

Das Aufrufen der Methoden IUIAutomationGridPattern::GetItem und IUIAutomationTextPattern::RangeFromChild führt zu den in der folgenden Tabelle beschriebenen Verhaltensweisen.

Aufgerufene Methode Ergebnis
IUIAutomationGridPattern::GetItem mit Parametern (1,1). Gibt das Benutzeroberflächenautomatisierung-Element zurück, das den Inhalt der Tabellenzelle darstellt. In diesem Fall ist das Element ein Textsteuerelement.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierung-Element das Objekt ist, das von der vorherigen IUIAutomationGridPattern::GetItem-Methode zurückgegeben wurde. Gibt „Y“ zurück.

Wenn der Textbereich durch ein Dokument TextUnit_Line durch ein Dokument bewegt wird, sollte jede Textzeile in einer Zelle als Zeile behandelt werden, wenn der Textbereich in eine eingebettete Tabelle eintritt.

Konzept