Using the JAWS Scripts For Microsoft Teams
Doug Lee
Last Revised April, 2025
This Guide provides tips for using Microsoft Teams (Teams) with JAWS For Windows and these scripts.
"Teams" here includes both stand-alone desktop Teams installations and web / web portal instances.
When the scripts are installed and Teams is open and focused, this document can be
opened via a double press of JAWSKey+F1 (or Insert+F1).
For more general information about using Teams with a screen reader, consult
Using Microsoft Teams With a Screen Reader.
Note that these scripts enhance, but do not replace, the native JAWS scripts for Teams that ship with JAWS
2019 and later.
This document does not describe those scripts specifically.
The standard JAWS help commands Insert+H and Insert+W are handled by those scripts and
thus do provide documentation for them.
Warning:
Microsoft Teams instances can vary widely in content for several reasons. Correspondingly, behaviors, screen
appearance, specific dialog text, etc., may not be identical from one Teams instance to another.
Of course, these differences can affect script performance and feature availability.
Reasons for these differences among Teams instances include
- Type of Teams login in use (corporate, school, home/personal, etc.).
- Differences between Teams Classic and the newer Teams, at least initially called Teams 2.
Microsoft is phasing out Teams Classic; but as of this writing (September, 2024), reports indicate that
Teams Classic will remain active into 2025.
- Different Teams release update channels, which can cause changes to arrive more slowly or quickly for one
installation as compared to another.
- Different policies between different work or school Teams servers, which are called Tenants.
- Differences in keystrokes and other features between a web app and an installed Desktop app for Teams.
- Differences in screen size and/or resolution. Teams may adapt its user interface to
accommodate a small screen space, for example, resulting in some dialog elements being omitted.
- Differences in interface code loaded into a running Teams instance directly from Microsoft. This code can
change without any local change to files, version numbers, etc.
Table of Contents
System Requirements For JAWS Users
These scripts require JAWS 2019 or later. Older JAWS versions do not include native Teams scripts,
which these scripts load in order to avoid blocking JAWS native support.
If you use JAWS 2019 and run into script load errors, be sure that your JAWS 2019 installation includes all
updates to that JAWS version.
Script Installation Instructions
To install these scripts on a new system:
- Load JAWS if this has not already been done. This will require
administrative privileges on the computer.
- Run JAWS as the user for whom the scripts are to be installed.
This and the following steps must be performed for each user of the computer
who will be using JAWS with these scripts.
- Download and run, or run directly, the installer for
these scripts; and follow the on-screen
directions. Be sure to install the scripts in the currently running
JAWS version if a JAWS version list is presented.
- To verify successful installation, type Insert+Q while
Teams is in focus. Part of the JAWS spoken response should be a revision number. If
you do not hear a revision number, the scripts are not correctly loaded.
Key Sequences
These scripts incorporate commands that consist of sequences of keystrokes, all beginning with a common prefix, or "command keystroke."
This approach allows many script commands without the risk of conflicting with application keystrokes.
See the "Multi-Key Command Sequences" section of the "Common Script Elements" document for further details, including
how to explore the available script commands (similar to exploring a menu system),
and how to change the Command keystroke if necessary.
By default, the Command keystroke for these scripts is [.
This document may refer to this keystroke as [ or Command;
so, for example, [ Tab and Command Tab both refer to typing the prefix keystroke, then separately the Tab key.
Some sequences may consist of more than two keystrokes, or "levels"; for example, [ d r would refer to typing [, then d, then finally r.
Using Teams With JAWS and the Scripts
Optimal Teams Configuration
In some cases, maximizing the currently focused Teams window, be it a main window, a chat, or another type,
may cause more controls to appear. This can affect script behavior. For example, a main window that is too
small may omit the tree of available chats until maximized.
Stand-Alone Application Versus Browser Teams Instance
Teams can be run as a stand-alone application or as a web page inside a browser.
When practical, the stand-alone application is recommended; but this is not always possible in corporate
environments.
This document assumes that the stand-alone application is in use but also documents variations in the
browser environment in some cases. Readers may sometimes need to translate given keystrokes to the browser
equivalents.
One important variation is in how to jump among "apps" in Teams (e.g., Activities, Chats, Calendar, etc.).
Ctrl with numbers accomplishes this in the stand-alone application. In the browser instance,
Ctrl+Shift with numbers do this; however,
starting in JAWS 2024, the native JAWS scripts use Ctrl+Shift with
numbers to read recent chat messages.
To switch to the Activities app in a browser instance of Teams
when running JAWS 2024 or later, use the JAWS "pass next key" command,
Insert+3, followed by Ctrl+Shift+1. The same approach works for all other similar
commands for switching among Teams apps.
Script Commands and Features
The scripts provide the following features, commands, and command modifications:
- [ C
- Moves focus to a tree control, which one depending on the active screen:
- The team list in the Teams app.
- The Recent Chats list in the Chats app.
- The activity tree in the Activities app.
As of Teams 2, this command is equivalent to the native Teams Ctrl+L command, which moves focus to an item
in the "left rail" list control.
The equivalent native command in a web instance of Teams is Alt+Shift+L.
- [ Shift+T
- Announces who is typing in the displayed conversation.
Due to frequent changes in the Teams interface, this command sometimes stops working.
- Quick Settings (JAWSKey+V) additions
- "Typing Sounder," checked by default, causes a sound to play while someone is typing in the current
conversation.
- "Typing Announce," checked by default, causes JAWS to announce who is typing each time this changes.
- [ N and [ Shift+N
- Move focus to the next and prior areas of the screen, respectively. These command sequences are duplicates
of the native Ctrl+F6 and Ctrl+Shift+F6 commands and are included for
those who prefer to avoid key combinations that require moving the hands away from the home row on the keyboard.
They may also be useful to users of Bluetooth keyboards that require an extra Fn key for function keys.
- ` (the grave accent key)
- Moves focus to the next control that allows it. This key acts like Tab but is capable of reaching
some controls that Tab may skip.
As the Teams interface matures, this command should become less often necessary, and by this writing
(September, 2024) may no longer be required.
- [ B
- Bring up a list of buttons for selection. Press Enter on a button's name to click the button,
or press Esc to close the list without activating any buttons.
This command can be especially useful for finding "Hang up" and other call management buttons quickly.
Note that the exact list of buttons produced by this command, and the list produced by the native JAWS
script Ctrl+Shift+JAWSKey+B command available beginning in JAWS 2024, may differ on some screens.
- [ L followed by a digit
- Focuses a list by its position among displayed lists.
[ L 1 focuses the first list, [ L 2 the second, etc. [ L 0 will focus the tenth
list, if that many exist.
The order of lists may not correspond to screen order.
This command may not work under Teams 2.
- [ S
- Announce who is currently speaking in a call or meeting.
Only tested in separate meeting windows but may work when the meeting is part of the main Teams window.
This command has not yet been tested under Teams 2.
- [ V
- Announce who is currently sending video in a call or meeting.
Only tested in separate meeting windows but may work when the meeting is part of the main Teams window.
This command has not yet been tested under Teams 2.
- [ T
- Move focus to the first tab control on the screen, or the next one if more than one are available and one
already has focus.
- JAWSKey+F1 typed twice quickly
- Opens this document in the default browser.
- Insert+T
- Says and Brailles, after the title, as many of the following as are applicable:
- the name of the displayed program area (Activity, Chats, Teams, Files, etc.).
- The sender's online status when a one-on-one chat is on screen.
When the sender's name is not already in the title, it is also included.
- Any indicators ("badges") for missed events, such as chats or team messages.
This may not yet work under Teams 2.
- The number of participants in a group chat or active call.
Active group calls have not yet been tested under Teams 2.
- Any notification banner text on screen, such as when an automatic sign-in failed and the user must sign in
manually.
If, in a one-on-one chat, the status appears as "Status unknown," it may be necessary to wait for Teams to update
the status. If this condition persists for more than a minute, it may be necessary to sign into Teams.
- Ctrl+JAWSKey+V typed three times quickly
- Brings up, in a JAWS virtual viewer, a list of the Teams versions so far seen. Each version will be shown
with the date on which it was first run with JAWS
and these scripts. This is meant to simplify identification of problems arising from Teams updates, although
the Teams HTML code can change without a corresponding change to the version number.
The scripts also provide the following features:
- The virtual cursor is turned off by default to simplify navigation.
Use Insert+Z to enable the virtual cursor again if and when desired.
- The
SayLine
JAWS command, when typed on a message list item, will
- Speak the message instead of saying "blank."
- Announce full messages instead of truncating very long ones.
- Virtualize a message on the command JAWSKey+Shift+V as is done in the standard JAWS scripts that
come with JAWS 2020 (March update or later).
- Name menu buttons in the Notifications page of Settings
when the local Teams version does not natively do this.
- Indicate when a feed filter returns no results, as part of the name for the "Remove feed filter" button.
(This feature is old and not recently retested.)
Tips and Tricks
These are tips and tricks for getting specific things done in Teams while running these scripts. To expand a
tip of interest, press its associated button. Each tip includes the date on which it was last tested by this
script author or by one of his assistants or clients.
Read hidden replies to a channel message and return to that message (April 23, 2025)
This is how to handle lines in a channel message reply list that starts with something like
"Open 6 replies..."
without losing track of where you were in the list of channel messages.
- Press Enter on the hiddin reply count line to open the full reply list.
- Shift+Tab once to move from the reply composition box to the reply list.
Focus will start on the original message at the top of that list.
- Read replies as necessary, reply to replies, etc.
- From the list of replies, Shift+Tab once to the "More channel options" menu button.
- Press the Right arrow once to move to the "Go to channel" button.
- Press Space to activate this button.
Focus will return to the list of posts in the current channel, and specifically to the message to which the
replies were attached.
Clear out-of-date "NEW" and "New Replies" flags (April 23, 2025)
This trick may help when Teams continues to mark posts "NEW" and "New Replies" even after you have caught up.
- Type the scripted command sequence [ C to move to the channel tree, combined chat and channel
tree, or whichever tree you have configured to appear.
- Press the Up arrow once to move focus away from the current chat's entry in the tree, then
press the Down arrow to return focus to it.
This will clear the flags, as long as the focus change actually removed the chat from the screen and then
brought it back.
- Press Enter to move focus to the last entry in the chat's history.
- Make sure no posts or replies arrived while you were doing this.
Find out who placed a reaction on a message (April 24, 2025)
- Press Enter on the message of interest.
- If the message was a post and not a reply, press Enter again.
- Use Shift+Tab to move to the first reaction present.
If you reach "More reactions," there are no reactions yet or you have already gone past them.
- Press the Menu (or Application) key on the reaction for a context menu.
- The context menu will consist of a list of "start chat" actions for each person who posted the reaction.
Use Up and Down arrows to read through the list.
- Esc out of the menu, then Esc again to return to the message.
- If the message was not a reply, press Esc one more time to return to it.
Known Issues
Issues shown in this section may be fixed in future script and/or application or JAWS
updates but are not addressed as of this writing.
Note that specific issues may and may not be present depending on the exact version of Teams HTML or application
code running.
Reactions to a channel message reply may not speak. This is a Teams accessibility shortcoming, noted and
reported to Microsoft in April, 2025.
The JAWS Insert+T command may include extra words like "Blocked" or "Away" in some chat screens.
This happens when a message is displayed that was sent by a person who is blocked, away, etc.
This should be fixed in an upcoming script revision.
Messages in a meeting chat that is part of a separate meeting screen may not read in exactly the same way as
messages in a meeting chat that is part of the main Teams screen.
The JAWS virtual and touch cursors may sometimes provide more information than the PC cursor, especially in
Settings pages where they can find hints for fields, group headings, etc.
Although sharing control from a JAWS machine works well, controlling another machine from a JAWS machine via
Teams does not.
Use the JAWS Tandem feature for this purpose. Problems with using Teams' control support instead include
- Difficulty focusing the screen area that causes local keystrokes to be sent to the remotely controlled computer.
- Difficulty exiting this area once focused.
- JAWS commands being handled locally instead of remotely.
- Inability to execute remote JAWS commands even when the local JAWS is first exited.
- Inability to stop remote speech with the Ctrl key.
When focus switches from outside of Teams directly into a chat message list,
Braille may not necessarily mirror speech for the focused chat message
until the user tabs away from and back to the list once.
This is due to JAWS not calling the BrailleCallbackObjectIdentify
function until the user first
moves among controls in Teams.
Some list controls may allow navigation with up and down arrows to move out of the list, or to wrap from one end of
the list to the other.
Revision History
This is the revision history of these scripts, most recent revision first:
Revision 290, April 25, 2025, tested in Teams current as of April 23, 2025 (5072.1611.3570.1995)
- This is the first version of these scripts that has been officially tested against what Microsoft
sometimes calls Teams 2.
From this revision forward, Teams Classic is not officially supported, though the scripts may continue to
work with Classic.
If you are still using the Teams Classic interface, updating to this script revision is not necessary and
may not work well.
- Accordingly with the above item, this documentation as well as the
Using Microsoft Teams With a Screen Reader
document are significantly updated.
- This is also the first script version tested against what Microsoft, as of 2025, calls Teams Free, also
called Teams Personal or Teams for Home.
Depending on installation, this may be a separate app (old approach)
or just a different appearance and feature set based on the
type of account login used (newer approach).
- This document includes a
Tips and Tricks
section that consists of expandable tips for various tasks.
- Chat history messages that include links but read only the link text and not the rest of the message now
include the rest of the message.
- In Teams 2,
JAWSKey+T
includes the number of participants in a group chat.
- In Teams 2, the sequence [ C for focusing chat and activity lists simply types the native Teams
keystroke for this purpose.
This means Ctrl+L in a local-app instance of Teams and Alt+Shift+L in a web instance.
L is presumed to stand for "left
rail," based on Microsoft's description of this keystroke; but of course it can also be thought of as standing
for "list."
- Alt+Left is prevented from executing the JAWS script normally attached to it, because current
Teams versions natively assign Alt+Left and Alt+Right to activate the Back and Forward
buttons, respectively.
- Arrowing through chat and feed (activity) lists is much faster in Teams 2.
- Typing the JAWS
SayLine
command twice quickly on a chat history entry will perform its
usual function rather than virtualizing the line.
In older Teams versions, spelling a chat history line was risky because the sheer length of it, when help text
was included on every line, could crash JAWS.
Use the JAWSKey+Shift+V keystroke provided with both these and the JAWS-native Teams scripts to
virtualize a message.
Note that "usual function" may depend on JAWS version. This author has seen a double SayLine
command spell the line in older JAWS versions and announce it word by word with pauses between words in JAWS
2025 instead, March 2025 update at least.
- Teams 2 versions are included in the version list displayed by typing Ctrl+JAWSKey+V three times in
quick succession.
- These scripts now load for teams.live.com along with teams.microsoft.com.
They also load for application name
ms-teams.exe
(the hyphen is new since the previous script
release).
- Insert+B, the standard JAWS command for reading a dialog in tab order, is much improved, though
it is still likely not to be perfect.
One improvement is the omission of URLs when reading dialog and screen container names.
- Documented the need to use different keystrokes in a browser Teams instance, and the
pass-key approach required for switching among Teams apps in that environment.
- Documented the possible causes and effects of differences among Teams installations.
- Documented the occasional need to maximize Teams windows.
- There are improvements in the efficiency of the code used for naming fields.
- Old history entries in this document section are now hidden inside a
details
tag
that may be expanded to show them. Among the benefits of this, heading count is reduced and text searches won't
match very old material.
- The UIA support is refactored significantly and updated to account for increases in JAWS' UIA support.
A JAWS restart after installing this script update is recommended, though not required.
- Some support specific to the latest updates to JAWS 2019 is removed. This support was specifically for a
problem with menus in what is now called classic Teams, and it is assumed that these issues do not carry over
into Teams 2. Versions of JAWS 2019 prior to the introduction of native Teams scripts remain unsupported by
these scripts.
- The following script commands are removed from the scripts, for lack of support and/or need as
indicated:
- The sequences [ U and [ Shift+U, for announcing and copying to clipboard any User
Principal Names (UPN) found on the current screen.
This information does not appear to be available under Teams 2 and was not always available in Teams Classic.
- The sequence [ F for cycling among available message reading formats.
Native format is now the only available format; the "default custom" format has not worked for some time due
to multiple changes in Teams message presentation and accessibility information formats.
- The sequences consisting of [ followed immediately by a digit, for reading parts of a
message.
This system was specifically designed to handle various issues in early Teams 1.x versions and is no longer
applicable or necessary. It also relied on a Microsoft regular expression parser that is now destined to
become unavailable.
Translators: There are substantial removals from one message file, and small changes/additions to that and
one other.
Diff showing message file changes
Lines starting with a dash are old, with a plus are new, and with a space are for context.
This material is offered experimentally to see if it helps translators keep up with project changes.
=== modified file 'teams_dgl_lang.xml' (properties changed: +x to -x)
--- old/teams_dgl_lang.xml 2021-10-18 16:25:39 +0000
+++ new/teams_dgl_lang.xml 2025-04-25 21:41:07 +0000
@@ -27,16 +27,6 @@
v=Identify participants who are sending video
t=Move to tab control
Shift+T=@
-u=Say User Principal Name or names
-Shift+u=Copy User Principal Name or names to clipboard
-f=Cycle through available message reading formats
-1=Read the date of the current message.
-2=Read the time of the current message
-3=Read the sender for the current message
-4=Read the content of the current message
-5=Read any flags for the current message, such as reply count, edited, etc.
-6=Read attachment information if any for the current message
-7=Read reaction types and counts for the current message
8=Read the help text associated with the current message
l=List focusing subcommands|List
l&1 through 9 and 0=Move to a list by index
@@ -49,13 +39,6 @@
<message name="msgFixingStructure">
Fixing Teams window structure
</message>
-<!-- For success and failure of the PressBack script. -->
-<message name="msgBack">
-Back
-</message>
-<message name="msgNoBack">
-Unable to find the Back button
-</message>
<!-- UIA name trailers for items in the Activities/Chat/Teams etc. toolbar. -->
<message name="scToolBarEnds">
Toolbar|Toolbar more options|more options
@@ -91,10 +74,6 @@
<message name="scMoreParticipants">
more participants
</message>
-<!-- Participant count for Insert+T. -->
-<message name="msgParticipantCount">
-%1 participants
-</message>
<!-- Generic "not found" message. -->
<message name="msgNotFound">
Not found
@@ -154,52 +133,17 @@
<message name="lbl___scProfilePicturePrefix">
Profile picture of
</message>
-
-<!-- Messages for the msg module. -->
-<!-- Default formats for messages. Field names are in {braces} and text blocks that appear only when fields produce text are in [square brackets]. -->
-<!-- Surrounding format: <sep><name>: <format>[<sep><name>: <format>...], where <sep> is usually |, <format> is as described above, and <name> is a user-visible name for the format. -->
-<!-- Only translate the text to the left of each colon; those are the format names presented to the user. -->
-<message name="msg___defaultMessageFormats">
-|Default custom: [{flags} ]{time} {sender}: {content}|Native:
-</message>
-<!-- How to report the format in effect when the user cycles among options. -->
-<!-- %1 is a format name from the format list; e.g., Native. -->
-<message name="msg___msgEffectiveFormat">
-Message format %1
-</message>
-<!-- Regular expression system for parsing messages, based on observations in Teams 1.3.00.4461. [DGL, 2020-03-24] -->
-<!-- System messages, like channel joins, don't match any of this and are handled natively. -->
-<!-- This is also true of inside-thread system messages like "2 replies from you and Kevin . Press Enter to expand replies." -->
-<!-- Fields generated (question mark means not always): -->
-<!-- dt: Date and time of message. -->
-<!-- date, time: Date and time split up from dt. -->
-<!-- sender: Sender of message. -->
-<!-- lastReplyDt?, lastReplyBy?: Date and time, and sender, of last reply in this message thread (seen at thread level, not inside a thread). -->
-<!-- lastReplyDate?, lastReplyTime?: Last reply date and time split out (present if lastReplyDt is present). -->
-<!-- flags: Any of several flags; e.g., edited, has attachments, has n replies, has reactions. -->
-<!-- replies?, newReplies?: Strings of integer reply and new-reply counts. -->
-<!-- content: Message content. -->
-<!-- help: Help text included in the MSAA AccName for the message. This can be long. -->
-<!-- Note to translators: Translate nothing left of the colon on any line; just translate text to the right of the colons. -->
-<!-- "Translate" here though means figure out what text appears in the application corresponding to the various lines. -->
-<!-- Case is significant on any line that does not include (?i). -->
-<message name="msg___parser">
-?_,_,sender,content,dt: ^(Message|Reply) from (.*?)\.\s+(.*)\.\s+Sent (.+?)\.\s+
-?_,sender,content,dt: ^Threaded conversation with 0 replies,\s+from ([^,]+),\s+(.*?)\s*, started ([^\.]+)\.\s+
-?_,_,sender,content,dt,+flags,replies,_,newReplies,lastReplyBy,lastReplyDt: ^Threaded conversation with \d+ (reply|replies),\s+from ([^,]+),\s+(.*?)\s*, started ([^\.]+)\.\s+((\d+) (reply|replies), (\d+) new)\. Last reply by (.*?) on ([^\.]+)\.\s+
-/dt/!dt: .+
-?/dt/_: ^on\s+
-?_,+flags: (Edited)\.\s+
-?_,+flags: (Message has reactions)\s+
-?_,+flags: (The message has an attachment)\.\s+
-_,_,+flags,help: ^((?!Press )(.*?)\s+)?(Press .*)$
-?+flags: .*
-/dt/!dt,date,time,_: ^(.*?)\s+(\d+:.*(\s+AM|\s+PM)?)
-?/lastReplyDt/!lastReplyDt,lastReplyDate,lastReplyTime,_: ^(.*?)\s+(\d+:.*(\s+AM|\s+PM)?)
-?/flags/_: , 0 new
-?/flags/_: ,(?= \d+ new)
-?/date/_: \s+at\s*$
-?/lastReplyDate/_: \s+at\s*$
+<!-- Case-insensitive names of list/tree controls from various apps. -->
+<message name="lbl___scChats">
+Chats
+</message>
+<message name="lbl___scFeed">
+Feed
+</message>
+<!-- Case-sensitive text appearing in GetObjectName() for a chat message containing one or more links. -->
+<!-- This must be preceded and followed by a space. -->
+<message name="lbl___scLink">
+Link
</message>
<!-- Messages for the tabs module. -->
@@ -212,6 +156,13 @@
Tab control %1 of %2
</message>
+<!-- Messages for the tutil module. -->
+<!-- The string in the browser title bar that indicates Teams Classic. -->
+<!-- Punctuation and spacing matter here, but letter casing does not. -->
+<message name="tutil___scClassicTitle">
+| Microsoft Teams classic
+</message>
+
<!-- Messages for the Electron module. -->
<!-- The names of the normal buttons found in an application title bar or dialog. Case sensitive. -->
<message name="electron___scTitleButtonNames">
@@ -408,32 +359,6 @@
<message name="re___msgNoREObject">
Unable to create a VBScript.RegExp object
</message>
-<!-- Format of an error message that has a line number to include. %1 is the line number and %2 is the error message. %3 is the parser line that generated the error. -->
-<!-- %4 is the name of the results member used as source material, and %5 is the source string at the time. -->
-<message name="re___msgErrorFormat1">
-Error at parser line %1: %2
-Parser line: %3
-Value of %4 at the time: '%5'
-</message>
-<!-- Various error messages. -->
-<message name="re___msgParserFormatError">
-Syntax error; line not understood
-</message>
-<!-- %1 is the number of names to catch matches/submatches from a parser line, and %2 is the number of submatches (which should be one less than the name count so the full match can take the first name). -->
-<message name="re___msgMatchCountMismatch">
-%1 names available but found a full match and %1 submatches
-</message>
-<message name="re___msgMatchFail">
-Match failed and is not optional
-</message>
-<!-- %1 is the name of a result which is not permitted. -->
-<message name="re___msgBadName">
-Results name %1 is not allowed (names that begin and end with an underscore are reserved)
-</message>
-<!-- %1 is the name of a result which is being assigned to twice without a + or ! indicating that this is allowed. -->
-<message name="re___msgDupName">
-Results name %1 is being assigned to twice without a + or ! indicator
-</message>
</language>
<!-- New languages go just above this line. -->
=== modified file 'teams_jcpdict_lang.xml' (properties changed: +x to -x)
--- old/teams_jcpdict_lang.xml 2021-08-06 15:50:20 +0000
+++ new/teams_jcpdict_lang.xml 2025-04-25 21:41:07 +0000
@@ -30,7 +30,7 @@
<message name="jcp___typeReadOnlyEdit">
read only edit
</message>
-<!-- This is what JAWS calls a graphic, but there seems not to be a WT_* constant for this one, at least for which getControlTypeName returns this string. -->
+<!-- This should match WT_Bitmap. -->
<message name="jcp___typeGraphic">
Graphic
</message>
Revision 223, October 18, 2021, tested in Teams app version 1.4.00.26376
This revision splits off from revisions that supported Teams versions older than 1.4.00.11161.
This revision may support a few older Teams versions but not many.
- Typing indicators work again.
- Insert+T again reports missed activity badges, such as the number of chats with unread messages.
- Some messages in a chat history that said nothing will now announce content.
- In an active multi-person call, Insert+T includes an estimate of how many participants are in
the call.
- [ P, for moving to the prior screen area (duplicate of Shift+F6), is changed to
[ Shift+N.
- Code is included to try to prevent the scripts from saving settings like
TypingSounder
to
.jcf
files other than the one for these scripts.
This problem has been seen in various Electron apps, so this remedy is being applied to all script sets
produced for Electron apps by this author.
- This document included an explanation and workarounds for an
occasional accessibility problem in Teams 1.4 versions.
Originally in the Known Issues section, this paragraph was removed for its obsolescence on August 9, 2023.
original paragraph
From time to time, Teams 1.4 versions have been known to stop providing accessibility information for some or
all of a screen. Symptoms include silence on Tab and Shift+Tab, apparent inability to
tab around, and unexpected or incomplete information for the Insert+T command.
Restarting Teams should fix this problem.
For an active meeting screen, using the "Change your view" option to toggle Full screen on and off may fix
this problem without a Teams restart.
This is also the final script revision that received partial corporate funding, by way of this author's then
current employer. This consisted of
payment for this author's company-internal script support time and for
some features developed by coworker request between 2018 and 2021.
Revision 208, June 9, 2021, tested in Teams app version 1.4.00.11161
This revision is the last revision supporting Teams versions 1.4.00.11161 and older. This revision may support
some newer versions but not all.
Download this revision if you use Teams 1.4.00.11161 or
older.
- Elapsed time indicators in a call or meeting window stay up to date according to JAWS.
- Insert+T includes one-on-one chat participant status in more cases in recent Teams 1.4 versions.
Revision 204, May 7, 2021, tested in Teams app version 1.4.00.11161
- Items in the Contacts list include contact names where this was not always the case.
- Contact names are included for chats for the Insert+T command in Teams 1.4.00.11161.
11 older revisions back through March 4, 2020
Revision 202, April 29, 2021, tested in Teams app version 1.4.00.8872
Warning: This revision marks the end of support for JAWS versions 17.0, 18.0, and 2018.
This is because this revision starts cooperating with Teams scripts that are included in JAWS itself starting
in JAWS 2019, but these can't be loaded in 2018 and older because they don't exist there.
If you need Teams scripts in JAWS 17, 18, or 2018, use the
revision 193 installer for JAWS 17, 18, and 2018 instead of the current revision.
There are no plans to continue updating that revision, though some of the below enhancements are included there.
Important: The BX Update feature for updating scripts will not work as a means of updating to
revision 193 or later from an older revision. It is necessary to run the appropriate script installer.
The following changes apply to both the current revision and revision 193:
- Added support for typing indicators:
The sequence [ Shift+T reports who is currently typing; and by default, JAWS will announce and make
sound when someone is typing. These defaults can be changed in Quick Settings (JAWSKey+V).
- Insert+T identifies status and participant Teams domain when possible in a chat with an external
party, instead of including neither.
This may not work under Teams 1.4 in script revision 193; see the next list.
- Insert+T no longer says things like "Toolbar more options" in recent Teams versions.
- The sequence [ U says, and the sequence [ Shift+U also copies to clipboard, any User
Principal Names (UPN) found associated with the current screen.
These commands provide a quick way to grab the id strings for chat users for use elsewhere.
- Documented how to handle screen sharing and control requests.
- Documented that [ C can move to the activity list in the Activities app.
- Documented that Accent can move to the "More actions" button for a Call History list entry.
- Fixed a very rarely triggered bug that could cause messages containing certain word combinations to be
replaced by "ChromeLegacyWindow" durring navigation through messages.
This bug was never observed in Teams but was observed in another project using some of the same code.
- Added protection against certain kinds of unusual HTML code that could otherwise prevent JAWS scripts from
finding information on a page.
This issue was never seen in Teams but has been seen in other HTML settings.
- Removed some old code that supported JAWS versions before 14.0, and included various minor updates to improve
support for JAWS 2020 and 2021.
The following changes are available in this revision but not in revision 193:
- Added support for any commands and functionality provided by native JAWS scripts for Teams, such as the
Alt+H command for hanging up a call.
Specifically which commands and functionality exist will of course depend on the running JAWS version and the
Teams scripts that came with it.
Script translators should note that the XML files of translatable messages are renamed to include "
_dgl
"
in their names.
- Insert+T identifies participant status in Teams 1.4 versions where this stopped working due to
changes in Teams itself.
- Navigation through an org chart should work.
- Documented how to make Teams use Windows-style notifications where Teams allows this.
Revision 173, October 07, 2020, tested in Teams app version 1.3.00.21759
- The sequence [ C for jumping to the recent chat or team tree, depending on which is on screen,
works more effectively in Teams 1.3.00.26064 and other nearby versions.
- Special adjustment for chat history lists in a meeting screen for Teams version 1.3.00.26064:
Messages such as conversation joins that include a long ID string instead of a person's name are corrected to
include the name instead of the ID.
The ID will still appear along with the name in the JAWS virtual view for those who use it, however.
- During navigation among rows in the Calls > Contacts table, the scripts reduce extra speech, remove
duplicates of the same phone number on the same line, and better format phone numbers for speaking.
- In other places in Teams, such as the Activities list, the initial phrase "Profile picture of" is removed
for brevity.
- Alt+Left presses the Back button in screens where it can be found.
Revision 162, September 01, 2020, tested in Teams app version 1.3.00.21759
- The [ S sequence for announcing current speakers in a meeting should work in at least Teams
1.3.00.21759.
(The method used to display this information has changed among Teams versions.)
- The sequence [ V reports who is sending video.
This and the previous [ S sequence have only been tested in separate meeting windows, not when the
meeting is part of the main Teams window.
- Presence indicators like "in a call" become part of the Insert+T response in a popout chat just
as in a main-Teams-window chat.
- The [ C sequence for moving to a chat or team tree works correctly in Teams 1.3.00.21759, where
it previously moved instead to the New Chat button in the Chats app.
- Tab and Shift+Tab should less often read the names of Minimize, Maximize, and Close
buttons along with other unnecessary material.
- Though Tab and Shift+Tab remain silent in a document preview window for an Office file
from the Files tab of a team channel, the JAWS
SayWindowPromptAndText
(JAWSKey+Tab) and
SayLine
(JAWSKey+Up) commands announce the focused control, which Tab and
Shift+Tab do move among.
This fix is experimental and subject to improvement.
- Keystroke names in this document are more consistent.
Revision 150, August 18, 2020
- JAWS should be more responsive during the entry of text into an edit control, such as during the entry of
a chat message.
This especially affects users who leave Key Echo set to Characters and who also use a braille display.
- The sequence [ C will, when possible, move focus to the tree of teams and channels or to the tree
of recent chats. One of these two controls must already be on screen for this command to work.
- When a one-on-one chat is on screen but its sender's name is not part of the window title, JAWS will include
the sender's name just before the sender's online status (presence).
This often happens when Teams is launched and a chat window appears initially.
- Braille should mirror speech for messages in a chat message list.
This may not be true when focus switches from outside of Teams directly into the message list, until the user
tabs away from and back to the list once.
This exception is due to JAWS not calling the
BrailleCallbackObjectIdentify
function until the user
first moves among controls in Teams.
- Fixed a bug that could cause some localized strings not to be spoken where expected.
- Several efficiency improvements, including both optimization of code and removal of obsolete code.
Revision 139, July 01, 2020
- Key sequences consisting of [ L followed by a digit will focus a list by its position among
displayed lists.
[ L 1 focuses the first list, [ L 2 the second, etc. [ L 0 will focus the tenth
list, if that many exist.
The order of lists may not correspond to screen order.
- The [ T sequence for moving focus among tab controls should work with more tab controls.
- [ S will attempt to announce who is currently speaking in a call or meeting. This information is
likely to be out of date, however, due to the way accessibility information is managed by Teams and/or Electron.
Focusing a participant's list item updates that participant's information. This is the initial reason for the
above command sequences for focusing lists.
- Insert+T's reporting of sender online status is more reliable (sometimes the status was previously
not included).
- JAWS should sometimes repeat less information when Teams receives focus from another application.
- Tabbing may be faster in some cases.
- For those who need to change the Command key, the left bracket ([) by default, the system is
significantly improved, so that you need not type the key or key combination out as a name or string of key
names. You may
edit the keystroke names before accepting them, but JAWS will type them out for you now.
The system is documented in more detail in the Multi-Key
Command Sequence section of my Common Script Elements page.
- The installer contains version and product information visible from the Details tab in Windows Explorer,
to better identify its contents. This update is being applied to all projects.
- A "directives" text file is included that provides information on how to install this set of scripts manually.
See "Handling Directives Files" in the "Common
Script Elements" document for further information.
- teams.jcf is no longer included in the installer and file set, but the installer inserts needed lines into
it if necessary. This allows users to customize JAWS behavior in Teams without having to redo settings after every
script update. The specific jcf settings inserted by the installer also appear in the directives file to help
those who wish to install the Teams scripts manually.
- Screen readers respond better to activation of same-page links in this document.
(This update may have slipped out in an earlier release but without being documented.)
Revision 116, April 19, 2020
- The messages for these scripts are now distributed in XML rather than jsm files so that translators can
create translations with no need for script source recompilation.
See the Script Translation Procedure document for details on
how to translate these scripts, including how to update the XML message file.
Revision 108, April 15, 2020
- The JAWS Insert+T command will include, when applicable,
- The sender's online status when a one-on-one chat is on screen.
- Any notification banner text on screen, such as when an automatic sign-in failed and the user must sign in
manually.
- The sequence [ 3, for reading the sender of a message, includes the sender's online status when
possible.
- Sometimes, Teams' accessibility information winds up owned by another window that is not part of Teams,
which causes screen readers to become confused. These scripts try to detect and rectify this situation when Teams
takes focus. On failure, the scripts produce an announcement advising the user how to attempt to fix the problem
manually.
Revision 99, April 14, 2020
- A bug in the processing of very long messages through JAWS that could result in messages not reading or
reading incompletely is fixed.
Revision 98, April 07, 2020
- Much repetition during navigation through messages in a chat should stop.
- There is a new system for improving the reading of messages. See The Message Reading System
for details and relevant commands.
This system is still a work in progress. If you encounter problems or don't like the new format, you can always
use the sequence [ F to switch back to native format, where messages are spoken exactly as they are
provided by Teams itself.
Even when native format is in effect, the commands for reading portions of the current message will still operate
as described.
- The Accent key, `, will attempt to focus the next control that allows focus, regardless of whether
the Tab key would reach it. This can be useful for reaching links in messages and other controls
that the Tab key may skip.
- The sequence [ B brings up a list of buttons for selection. Press Enter on a button's
name to click the button, or press Esc to close the list without activating any buttons.
This command can be especially useful for finding "Hang up" and other call management buttons quickly.
- Some buttons with numerical names, which tend to indicate counts such as number of chat participants, are
named by their mouse hover titles when possible. The count is still spoken after the title.
- Multiple removals of team members indicated in a single message will say "More than one member has been
removed from the team" rather than "messages_removeMembersTeamBySystemSystemMessageOneTarget."
Teams may fix this issue internally in a future update.
- If arrows, Home, End, etc., in a message list read obsolete information, this should
no longer happen. This issue was never observed or reported but was found to be possible, and thus fixed anyway.
- Ctrl+Backspace is protected from temporarily freezing Teams under some conditions, as reported
in the "What's New" documentation for the JAWS March 2020 update.
This issue is also addressed by JAWS' built-in Teams scripts for that JAWS version.
- The
VirtualizeCurrentControl
command, JAWSKey+Shift+V, virtualizes the current
message in these scripts as it does in the JAWS 2020 standard JAWS scripts for Teams.
At this time, typing Insert+Up twice will also do this as it has in these scripts for some time.
Both of these commands will virtualize the actual message as it is presented by Teams, not any reformatting of
it presented via the scripts' message reading system.
Revision 71, March 10, 2020
- A significant attempt is included to minimize problems in the web-based Chrome instance of Teams during
navigation among replies in a threaded conversation. In the web-based Teams version, Up and
Down arrows to move among replies cause a large number of spurious menu events, focus changes, and
extra speech.
These issues appear to apply only in JAWS versions older than 2020 and do not apply in the Desktop Teams
application.
As such, the workaround code is written to apply only to those situations and to be ignored otherwise.
Revision 62, March 4, 2020
- Initial public release.
Revision 61 was published on February 21; but due to an oversight, there was no link provided to the scripts
even though they were available via direct link.
This revision consists of the same code as revision 61.