Freigeben über


So macht die Benutzeroberflächenautomatisierung eingebettete Objekte verfügbar

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

Für die Benutzeroberflächenautomatisierung ist ein eingebettetes Objekt ein beliebiges Element, das Nicht-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 Component Object Model (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 nicht relevant.

Eingebettete Objekte und die Benutzeroberflächenautomatisierungs-Struktur

Eingebettete Objekte werden als einzelne Elemente in der Steuerelementansicht der Struktur der Benutzeroberflächenautomatisierung behandelt. Sie werden als untergeordnete Elemente des Textcontainers verfügbar gemacht, sodass über dasselbe Objektmodell wie bei anderen Steuerelementen in der Benutzeroberflächenautomatisierung auf diese zugegriffen werden kann.

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

Containerelemente

Nicht-Containerelemente

  • Calendar
  • Kombinationsfeld
  • DataGrid
  • Dokument
  • Bearbeiten
  • Group
  • Header
  • HeaderItem
  • Liste
  • Menü
  • MenuBar
  • Bereich
  • SplitButton
  • Tab
  • Tabelle
  • Symbolleiste
  • Struktur
  • TreeItem
  • Window
  • Verknüpfung
  • CheckBoxes
  • 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 Inhaltsansicht der Benutzeroberflächenautomatisierung des vorherigen Dokuments wird im folgenden Diagramm dargestellt.

Diagramm der Inhaltsansicht der Benutzeroberflächenautomatisierung eines Dokuments mit eingebetteten Objekten

„Kompatible“ und „nicht kompatible“ eingebettete Objekte

Einige Anbieter von Benutzeroberflächenautomatisierung verwenden denselben Textspeicher für jedes TextPattern-Objekt, das sie enthalten. Objekte, die von demselben 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. Dies ermöglicht es den Anbietern, Clientinformationen zu den einzelnen TextPattern-Objekten verfügbar zu machen, als wären sie ein großer Textanbieter.

Anbieter können jedoch unterschiedliche Textspeicher für verschiedene TextPattern-Objekte verwenden, die in einem TextPattern-Container eingebettet sind. Objekte, die nicht vom Textspeicher des Containers unterstützt werden, werden als „nicht kompatible“ eingebettete Objekte bezeichnet. Diese Typen von eingebetteten Objekten können TextPattern-basierte Objekte sein.

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

Objekte Kompatible eingebettete Objekte Nicht kompatible eingebettete Objekte
Eingebettete Nicht-TextPattern-Objekte 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 von eingebetteten Objekten

Die Steuerelementmuster Text and TextRange machen Methoden und Eigenschaften verfügbar, die das Navigieren und Abfragen von eingebetteten Objekten 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ächenautomatisierungs-Client den Text abruft, um ihn zu lesen, zu interpretieren oder zu analysieren, muss der Textbereich auf bestimmte Fälle überprüft werden, z. B. auf Tabellen mit Textinhalt oder andere eingebettete Objekte. Rufen Sie IUIAutomationTextRange::GetChildren auf, um eine IUIAutomationElement--Schnittstelle für jedes eingebettete Objekt abzurufen, 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

Ein degenerierter (oder reduzierter) Bereich ist die Stelle, an welcher der Startendpunkt und der Endpunkt identisch sind. Degenerierte Bereiche werden häufig verwendet, um die Textcursorposition über die ITextProvider-Methoden GetSelection und GetCaretRange anzugeben.

Das folgende Diagramm zeigt einen Textdatenstrom mit eingebetteten Objekten und deren Bereich.

Diagramm, das einen Textdatenstrom mit eingebetteten Objekten und deren Bereichsspannen zeigt

Eingebettete Objekte und TextUnit

Ein ITextProvider-Objekt kann durch ein angegebenes TextUnit-Element durchlaufen werden. Anbieter, die eingebettete Objekte enthalten, können auf die gleiche Weise durchlaufen werden, aber eingebettete Objekte wirken sich auf das Durchlaufen aus. Hier sind einige Aspekte, die es zu beachten gilt:

  • Jedes nicht kompatible eingebettete Objekt wird durch das Ersatzzeichen U+FFFC im Textspeicher des TextPattern-Elements des Containerelements dargestellt. Es gilt auch als Zeicheneinheit und Worteinheit.
  • Kompatible eingebettete Objekte können aus mehreren Zeichen und Wörtern bestehen.
  • Das umschließ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 Tabelle) geht eine Wortgrenze nicht über die Objektgrenze hinaus. Im folgenden Beispiel enthält die Worteinheit „Bar“ keine Textposition außerhalb des </td> Tags (<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 <br \> als einzelnes Wort behandelt, sodass es nicht über eine Zeilengrenze hinausgeht.
  • Eine Ausnahme von der vorherigen Regel besteht darin, dass eine Word-Texteinheit vollständige Objekte in sich selbst enthält. Beispiel: Enthält <p>Hello <a href="#">link</a> here.</p>, das Inlinecontainer umfasst, enthält die Wörter „Hello“, „link“ und „here“. Dabei weist „link“ ein TextPattern-Objekt als umschließendes Element und ein Linkobjekt als untergeordnetes Objekt auf.
  • Im Fall von Zeicheneinheiten ist das Objekt das umschließende Element (solche Texteinheiten dürfen keine untergeordneten Elemente haben).
  • Anmerkungsobjekte dürfen nicht als eingebettetes Objekt dargestellt werden. Ein Beispiel dafür ist das Vorhandensein von Bezeichnern für andere Autoren in einem gemeinsam erstellten Dokument.
  • Eingebettete Objekte nehmen mindestens eine Cursorposition ein, Anmerkungen sind nur Metadaten.
  • Jede Objektgrenze (Start und Ende) wird durch einen Formatwechsel im TextPattern-Dokumentbereich dargestellt.
  • Für HTML führt jedes HTML-Tag nicht unbedingt zu einem Benutzeroberflächenautomatisierungs-Objekt. Beispielsweise müssen Inhalte innerhalb von -Hervorhebungstags nicht als Element dargestellt werden, sondern als Textdatenstrom, in dem „UIA_IsItalicAttributeId“ „TRUE“ zurückgibt.
  • Der Endpunkt „Start“ ist einschließend und ist der bevorzugte Endpunkt, während der Endpunkt „Ende“ ausschließend ist. Dies ist nützlich, wenn der Bereich degeneriert ist und die Endpunkte „Start“ und „Ende“ zur selben Position für diesen Bereich gehören.

Vergleich eingebetteter Objekte

Geschachtelte TextPattern-Objekte, die sich in einer ähnlichen untergeordneten Beziehung befinden und denselben Sicherungstextspeicher gemeinsam verwenden, werden als vergleichbar bezeichnet. In diesem Fall können Bereiche von einem der TextPattern-Objekte mithilfe von 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 dem TextPattern-Objekt vergleichbar, wenn das Objekt über einen gültigen Bereich im TextPattern-Objekt (ITextProvider::RangeFromChild) verfügt und der Inhalt hinter dem Textbereich nicht leer ist und kein Ersatzzeichen ist.

Eingebettete TextPattern-Objekte und „TextUnit“ des Dokuments

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

TextPattern-Elementhierarchie in Word

  • Das Dokumentelement 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 (auch wenn die Seiten denselben Textspeicher mit dem gesamten TextPattern des Dokuments teilen).

Webseiten- und Texteingabesteuerelemente in Edge

  • Das Hauptwebseitenelement 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 mit der gesamten Webseite teilen).

Häufige Szenarien

In diesem Abschnitt werden Beispiele für allgemeine Szenarien vorgestellt, die eingebettete Objekte umfassen: Links, Bilder und Tabellen. In den folgenden Beispielen stellt die linke geschweifte Klammer ({) den Endpunkt „Start“ des Textbereichs dar, und die rechte geschweifte Klammer (}) stellt den Endpunkt „Ende“ 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ächenautomatisierungs-Element zurück, das den Textbereich umschließt, in diesem Fall das Automatisierungselement, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::GetChildren Gibt ein Benutzeroberflächenautomatisierungs-Element zurück, welches das Hyperlink-Steuerelement darstellt.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierungs-Element von der vorherigenIUIAutomationTextRange::GetChildren-Methode zurückgegeben wurde. Gibt den Bereich zurück, der „https://www.microsoft.com"“ darstellt.

Der folgende Textbereich erstreckt sich teilweise über 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ächenautomatisierungs-Element zurück, das den Textbereich umschließt; in diesem Fall das Hyperlink-Steuerelement.
IUIAutomationTextRange::GetChildren Gibt NULL zurück, da der Textbereich nicht die gesamte URL-Zeichenfolge umfasst.

Der folgende Textbereich erstreckt sich teilweise über 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ächenautomatisierungs-Element zurück, das den Textbereich umschließt, in diesem Fall das Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::Move Verschiebt die Textbereichsspanne nach „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 Text eingebettet.

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

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

{Das Bild 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. Ein dem Bild zugeordneter Alternativtext (ALT) wird nicht in den Textdatenstrom aufgenommen.
IUIAutomationTextRange::GetEnclosingElement Gibt das innerste Benutzeroberflächenautomatisierungs-Element zurück, das den Textbereich umschließt, in diesem Fall das Element, das den Textanbieter selbst darstellt.
IUIAutomationTextRange::GetChildren Gibt ein Benutzeroberflächenautomatisierungs-Element zurück, welches das Bildsteuerelement darstellt.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierungs-Element von der vorherigenIUIAutomationTextRange::GetChildren-Methode zurückgegeben wurde. Gibt den degenerierten Bereich zurück.

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

Der folgende Textbereich erstreckt sich teilweise über 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ächenautomatisierungs-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 Textdatenstroms betrachtet werden, hat das Bild in diesem Beispiel keine Auswirkungen auf IUIAutomationTextRange::Move oder dessen Rückgabewert (in diesem Fall 2).

Tabelle

Tabellenbeispiel 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 Y
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ächenautomatisierungs-Element zurück, das den Inhalt der Tabellenzelle darstellt; in diesem Fall ist das Element ein Textsteuerelement.
iuiautomationtextpattern::rangefromchild Gibt den Bereich des Bilds Abbildung eines Shuttles zurück.
GetEnclosingElement für das Objekt, das von der vorherigen IUIAutomationTextPattern::RangeFromChild-Methode zurückgegeben wird. Gibt das Benutzeroberflächenautomatisierungs-Element zurück, das die Tabellenzelle darstellt. In diesem Fall ist das Element ein Textsteuerelement, welches das TableItem-Steuerelementmuster unterstützt.
IUIAutomationTextRange::GetEnclosingElement für das Objekt, das von der vorherigen GetEnclosingElement-Methode zurückgegeben wird. Gibt das Benutzeroberflächenautomatisierungs-Element zurück, das die Tabelle darstellt.
IUIAutomationTextRange::GetEnclosingElement für das Objekt, das von der vorherigen GetEnclosingElement-Methode zurückgegeben wird. Gibt das Benutzeroberflächenautomatisierungs-Element zurück, das den Textanbieter selbst darstellt.

Tabellenbeispiel 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ächenautomatisierungs-Element zurück, das den Inhalt der Tabellenzelle darstellt. In diesem Fall ist das Element ein Textsteuerelement.
IUIAutomationTextPattern::RangeFromChild, wobei das Benutzeroberflächenautomatisierungs-Element das Objekt ist, das von der vorherigen IUIAutomationGridPattern::GetItem-Methode zurückgegeben wird. Gibt „Y“ zurück.

Wenn ein Dokument nach TextUnit_Line durchlaufen wird und der Textbereich in eine eingebettete Tabelle eintritt, muss jede Textzeile in einer Zelle als eine Zeile behandelt werden.

Konzept