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.
Die Benutzeroberflächenautomatisierung Inhaltsansicht des vorherigen Dokuments ist im folgenden Diagramm dargestellt.
"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.
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.
HyperLink Beispiel 1: Ein Textbereich, der einen eingebetteten Textlink enthält
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. |
HyperLink Beispiel 2: Ein Textbereich, der sich teilweise über einen eingebetteten Textlink erstreckt
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. |
HyperLink-Beispiel 3: Ein Textbereich, der sich teilweise über den Inhalt eines Textcontainers 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 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} 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 |
---|---|
X | |
J | |
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 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.
Zugehörige Themen
Konzept
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für