Neulich wurde ich per E-Mail gefragt, ob ich nicht einmal etwas über die verschiedenen Cursor und Navigationsmodi des NVDA schreiben könnte. Der Autor und offenbar viele andere Umsteiger von kommerziellen Screen Readern kämen mit dem andersartigen Konzept von NVDA nicht gut zurecht. Nun denn, los geht’s!

Ein wenig Geschichtliches 🔗

Als die Screen Reader Anfang der 1990er Jahre die Windows-Welt erschlossen, gab es noch keine echten Programmierschnittstellen, um grafische Informationen per Sprachausgabe oder anderen alternativen Ausgabemedien zugänglich zu machen. Die einzige Möglichkeit war, sich per diverser schmutziger Tricks in alle möglichen dokumentierten und undokumentierten Kanäle von Windows zu hängen und Informationsflüsse abzugreifen. Daraus erstellten die Screen Reader sich dann ihre eigenen Datenbanken, ein sogenanntes off-screen model. Diese Technik wurde mit Windows 3.1 eingeführt und blieb bis zum Auslaufen von Windows Millennium quasi unverändert in den Home-Betriebssystemen bestehen.

Unter Windows NT 4 musste eine etwas andere Art der Informationsbeschaffung genutzt werden, nämlich ein Grafiktreiber, der vor den eigentlichen Treiber geschaltet wurde und so die Informationen, die eigentlich für die Grafikkarte bestimmt waren, erst abschnorchelte und dann weitergab. Diese Technik blieb bis einschließlich Windows XP unverändert bestehen.

In Windows Vista und 7 verbot Microsoft diese Art der Abschnorchelung und schaffte eine Alternative Möglichkeit, einen sogenannten Spiegeltreiber, der die Informationen von Microsoft parallel zur Grafikkarte erhielt. Aber immer noch bestand eine der Hauptinformationsquellen der kommerziellen Screen Reader wie JAWS, Window-Eyes & Co. aus diesen abgeschnorchelten und somit nicht klar definierten Daten.

Parallel gab es natürlich Entwicklungen wie Microsoft Active Accessibility (MSAA), mit denen Microsoft 1997 begann, grafische Informationen auf eine standardisiertere Weise zugänglich zu machen. Diese und andere ihr nachfolgende Methoden wie Microsofts eigener Nachfolger UI Automation (UIA), die Java Accessibility Bridge benötigen kein „Abkratzen“ grafischer Informationen mehr, sondern stellen alle benötigten Informationen über Namen, Rollen und Zustandsangaben selbst zur Verfügung. Auch die Bildschirmpositionen sind hierüber abfragbar.

Da es aber unter Windows bis heute möglich ist, Anwendungen zu schreiben, die diese Programmierschnittstellen nicht bedienen, haben sich die kommerziellen Screen Reader weiterhin auf ihre Off-Screen-Modelle verlassen, um Informationen zu erhalten. Zumeist ist dies in JAWS & Co. bis heute und bis Windows 7 die Hauptinformationsquelle, obwohl die Informationen, die MSAA & Co. bieten, deutlich besser sind und nicht von z. B. abgeschnittenen Texten verunstaltet werden

Mit Windows 8 ist nun endgültig Schluss mit der Abschnorchelei von Grafiktreiberinformationen. Microsoft hat den Laden dicht gemacht, so dass so Dinge wie der JAWS Cursor unter Windows 8 fast nichts mehr sehen. Es gibt noch einige wenige Aufrufe definierter Methoden, die Microsoft erlaubt, aber die nützen in der Regel nichts mehr.

Die Lösung des Problems 🔗

Die Lösung heißt bei JAWS Touch Cursor. Und dies ist quasi ein Abgucken dessen, was NVDA schon seit Anbeginn macht, nämlich eine Bildschirmerkundung auf Basis der besseren, weil definierten, Daten der Programmierschnittstellen MSAA und UIA. Andere Betriebssysteme wie iOS; Mac und Linux/Gnome funktionieren ausschließlich auf diesen Prinzipien, und NVDA hat sich als wesentlich jüngeres Screen-Reader-Projekt unter Windows gar nicht erst mit alten Zöpfen abgegeben, sondern den modernen Ansatz gewählt.

Und NVDA gibt den ganzen Objekten hierarchische Ordnung. Container werden als solche bezeichnet und behandelt, und wenn man sich ihren Inhalt anschauen möchte, muss man hineinzoomen. Mac-Anwender kennen dieses Konzept als Interagieren von VoiceOver mit bestimmten Elementen.

Auch NVDA unterstützt die verschiedenen wenigen Bildschirm-Abfrage-Möglichkeiten inzwischen, aber bei ihnen ist es eine erst vor einigen Jahren erfolgte Nachreichung, um bestimmte Lücken zu schließen, nicht die primäre Informationsquelle.

Die verschiedenen Cursor 🔗

Auch NVDA kennt verschiedene Cursor bzw. Zustände. Da wäre zunächst der Systemfokus, der immer da ist, wo die Tastatureingaben gerade hin gehen. Das JAWS-Äquivalent ist der PC Cursor. NVDA nennt dies Fokus-Modus.

Dann gibt es den Browse-Modus, der immer dann aktiv ist, wenn in Webinhalten navigiert wird. Dies ist das Äquivalent zum virtuellen PC Cursor von JAWS.

Und dann gibt es den NVDA-Cursor, manchmal auch als Objektnavigator bezeichnet. Dies ist der Modus, der immer den gesamten Baum von Bildschirmobjekten im Blick hat. Sein Ausgangspunkt ist standardmäßig die Position bzw. das Objekt des Fokus- oder Browse-Modus. Ja, ist man in Text im Web unterwegs, ist der Ausgangspunkt tatsächlich der Absatz, auf dem man sich gerade befindet. Man braucht nicht umzuschalten, sondern legt gleich mit der Erkundung los:

  • Mit NVDA-Taste und den Ziffernblocktasten 4 und 6 geht man auf einer Ebene ein Objekt zurück oder vorwärts. Im Laptop-Layout ist die Tastenkombination NVDA-Taste+Umschalt-Taste+Pfeil links oder rechts. Auf einem Touchscreen unter Windows 8 und 8.1 mit zwei Fingern nach links oder rechts wischen. Das Wischen mit einem Finger bewegt den objektnavigator zum nächsten oder vorherigen Element dem Bildschirmlayout entsprechend und hat keine Entsprechung per Tastatur.
  • Um eine Ebene nach oben zu gehen, also zum Container, der das aktuelle Objekt enthält, drückt man NVDA+Ziffernblocktaste 8 bzw. NVDA+Umschalt-Taste+Pfeil rauf. Um in einen Container hineinzuzoomen, drückt man entsprechend NVDA+Ziffernblocktaste 2 oder NVDA+Umschalt-Taste+Pfeil nach unten. Auf einem Touchscreen wischt man nach oben bzw. unten.
  • Um die Standardaktion des aktuellen Elements im Objektnavigator auszuführen wie einen Schalter zu aktivieren, drückt man NVDA+Ziffernblocktaste Eingabe bzw. NVDA+Eingabe auf dem Laptop, oder man führt einen Doppeltipp auf einem Touchscreen aus. Es ist also nicht nötig, die Maus zu diesem Objekt zu ziehen und dort zu klicken.

Standardmäßig arbeitet NVDA in einem reduzierten und somit übersichtlichen Objektnavigator-Baum, der unnötige Zwischencontainer und leere Elemente ausblendet. Um wirklich eine haargenaue Darstellung zu bekommen, kann man in den NVDA-Einstellungen unter NVDA-Cursor aber den genauen Modus anschalten, indem man das Kontrollfeld „Einfacher Darstellungsmodus“ deaktiviert.

Es ist auch möglich, mit den oben beschriebenen Navigatortasten den Bildschirm zu erkunden, so wie der Sehende ihn sieht, aber das ist nur ein sekundärer Modus, der eigentlich nur in Ausnahmefällen wie manchen Dialogen von Total Commander o. ä. nützlich ist. Man schaltet ihn mit NVDA+Ziffernblocktaste 7 bzw. NVDA+Umschalt-Taste+Seite Rauf ein und NVDA+Ziffernblocktaste 1 bzw. NVDA+Umschalt+Seite Abwärts wieder aus. Bitte beachten: Dies entspricht nicht der Erkundung eines Touchscreens, sondern dem doch sehr rudimentären Konzept des JAWS Cursors oder ähnlicher Konzepte bei anderen kommerziellen Screen Readern.

Wenn man ein Notebook mit Touchpad, eine angeschlossene Maus am PC oder einen Convertible mit Touchscreen oder gar ein Windows Tablet hat, auf dem NVDA läuft, kann man außerdem einfach mit der Maus bzw. dem Finger den Bildschirm erkunden. NVDA gibt gesprochenes Feedback, orientiert sich aber wieder ausschließlich an per Programmierschnittstellen ordentlich wiedergegebenen Objekten. Hat man ein Element gefunden, auf das man klicken möchte, kann man entweder mit der Maus bzw. dem Touchpad klicken oder ein Doppeltippen ausführen, weil der Objektnavigator dem Finger folgt.

Man kann aber auch die Maus zum Navigatorobjekt ziehen, nämlich mit NVDA+Zifferntaste Minus bzw. NVDA+Umschalt+M. Ein Mausklick mit der linken Taste wird dann mit Ziffernblocktaste Schrägstrich bzw. NVDA+Ü ausgeführt, ein rechter mit Ziffernblocktaste Sternchen oder NVDA+Plustaste.

Text erforschen und kopieren 🔗

Innerhalb eines Navigatorobjekts kann man auch Text erforschen und kopieren. Die Ziffernblocktasten 7, 8 und 9 gehen dabei eine Zeile rauf, lesen die aktuelle Zeile oder gehen zur nächsten Zeile. Die Ziffernblocktasten 4, 5 und 6 tun das gleiche mit dem aktuellen Wort, die Ziffernblocktasten 1, 2 und 3 tun das gleiche mit dem aktuellen Zeichen. Links geht immer eines zurück, die Mitte liest, rechts geht eines weiter. Das funktioniert übrigens auch wunderbar in der Eingabeaufforderung.

Für Laptops sind die Tasten wie folgt: NVDA+Pfeiltasten links und rechts lesen zeichenweise, NVDA+Pfeil rauf und runter lesen zeilenweise, NVDA+Strg+Pfeil links und rechts lesen wortweise. NVDA+Satzpunkt liest das aktuelle Zeichen, NVDA+Umschalt-Taste+Satzpunkt liest die aktuelle Zeile und NVDA+Strg+Satzpunkt liest das aktuelle Wort.

Auch mit Touchscreens kann man Text erforschen: Zunächst schaltet man mit wiederholtem Tippen mit drei Fingern in den Textmodus um. Danach bewirkt ein Streichen mit einem Finger nach links und rechts ein Lesen des vorherigen bzw. nächsten zeichens, nach oben und unten navigiert zeilenweise, und mit zwei Fingern nach links und rechts streichen liest das vorherige bzw. nächste Wort. Das aktuelle Wort wird durch nach oben wischen vorgelesen, eine Geste, die stärker ist als das Streichen.

Zum Lesen der aktuellen zeile des Systemcursors, also dessen, wo sich gerade die Tastatureingaben abspielen, gibt es einen gesonderten Befehl. Auf Desktops ist dies NVDA+Pfeil Rauf, und zwar die Pfeiltaste der normalen Tastatur. Da diese auf Laptops bereits belegt ist (siehe oben), gibt es dort den Befehl NVDA+L.

Möchte man beliebigen Text vom Bildschirm kopieren, geht man wie folgt vor:

  1. Man bewegt sich mit den entsprechenden Navigationsbefehlen auf den Textanfang, den man markieren möchte und drückt NVDA+F9.
  2. Man bewegt sich nun aufs Ende des zu markierenden Textes und drückt NVDA+F10. Das Zeichen unter dem Navigator-Cursor wird dabei in die Auswahl mit einbezogen.

Der Text wird nun sofort in die Zwischenablage kopiert und kann weiterverwendet werden. Wichtig ist, dass man erst den Startpunkt markiert, eine umgekehrte Reihenfolge, also von Ende zu Anfang markieren, wird von NVDA nicht unterstützt. Auch auf Touchscreens wird diese Funktion zur Zeit nicht unterstützt.

Ein Beispiel 🔗

Ein Beispiel, nach dem ich konkret in der Mail gefragt wurde, soll nun folgen, nämlich das Erfassen der Eigenschaften einer Datei. Ich habe mir mal ein Dokument vorgenommen und seine Eigenschaften mit Alt+Eingabetaste geöffnet. Die unten stehenden Schritte erläutern das Vorgehen unter Windows 8.1, sollten aber ähnlich auch in Windows 7 funktionieren.

  1. Der Fokus landet bei mir auf dem Kontrollfeld „Schreibgeschützt“. Weiterhin liest NVDA einmal den gesamten Sermon des Dialogs vor, aber das kann sich ja kein Mensch so schnell merken!
  2. Also beginne ich mal, indem ich mit dem navigator zum Elternelement gehe. Das ist NVDA+Pfeil Rauf bzw. NVDA+Umschalt+Pfeil Rauf auf Laptops. Ich lande auf „Allgemein Eigenschaftsseite“. Jetzt kann ich beginnen, die Infos von vorn nach hinten zu lesen.
  3. Ich drücke nun die Tastenkombination zum Reinzoomen, also das erste Kindelement dieser Eigenschaftsseite zu lesen. Das ist NVDA+Ziffernblock 2 bzw. NVDA+Umschalt+Pfeil Runter auf Laptops.
  4. Ich lande auf einer unbeschrifteten Grafik. Das ist keine Grafik, die er durch Bildschirmabkratzen gefunden hat, sondern eine, die tatsächlich ohne Beschriftung so definiert wurde. Nun wandere ich mit NVDA+Ziffernblock 6 bzw. NVDA+Umschalt+Pfeil Rechts Objekt für Objekt weiter. Als erstes kommt der Dateiname, dann wieder eine Grafik, dann der Dateityp, dann ein Öffnen mit, dem sogar noch ein Button fürs Ändern folgt, und dann der Dateipfad. Na,e, Typ und Dateipfad sind schreibgeschützte Eingabefelder. Mit Tab komme ich nicht zu allen hin, mit dem Objektnavigator schon, und vor allem kann ein Sehender mit der Maus reinklicken, um z. B. den Pfad o. ä. zu kopieren. Nun, wir können das auch.
  5. Mit NVDA+Eingabetaste setze ich den Fokus in das Eingabefeld Pfad. Das bewirkt, dass der Systemfokus sich ändert und wir ab sofort wieder damit interagieren. jetzt kann ich z. B. mit Strg+A den Text markieren, wenn das noch nicht der Fall ist und ihn mit Strg+C kopieren.
  6. Mit NVDA+Ziffernblock 6 bzw. NVDA+Umschalt+Pfeil Rechts kann ich jetzt einfach weiter navigieren, wir sind ja schon ein gutes Stück weit gekommen und müssen nicht wieder von vorn anfangen.
  7. Wandert mal weiter bis zum Schalter „Erweitert“. Ein Weiterwandern verursacht die Meldung „Kein weiteres objekt“. Hier sind wir also am Ende angekommen. Wie in Schritt 2 können wir jetzt wieder zum Elternelement wandern und z. B. gucken, was es auf der Ebene noch gibt. Da finden sich bei mir als nächstes, also nach der Allgemein Eigenschaftsseite, noch der OK Button, der Abbrechen Button und ein Container namens Registerkarte, der die Tabs Allgemein und Details enthält.

Alles klar? 🙂

Fazit 🔗

Ich hoffe, dass mit dieser kleinen Einführung etwas Licht ins Dunkel der verschiedenen NVDA-Modi gebracht wurde! Wichtig ist sich klarzumachen, dass bei NVDA alles standardmäßig ein Objekt mit ordentlichen Eigenschaften ist und nicht eine platte Bildschirmdarstellung ohne semantischen Bezug zu dem, was das objekt ist, was es tut und in welchem Zustand es sich befindet. Und eines noch: Es gibt keine Möglichkeit, Grafiken zu beschriften. Dieser Altlast hat sich NVDA niemals bedient. 😉

Gerade wenn man schon mit VoiceOver auf dem Mac vertraut ist, kommen einem viele Konzepte hier wieder bekannt vor. Man hat immer eine genaue Kontrolle darüber, welche objekte da sind und welche nicht, und es gibt keine Ungenauigkeiten außer denen, die tatsächlich aus Fehlern in Anwendungen resultieren. Aber Ungenauigkeiten durch Bildschirmneuaufbauten, durch die kommerzielle Screen Reader schon immer gern mal aus dem Tritt gerieten, gibt es bei NVDA nicht.

Viel Spaß beim Erforschen! 🙂