Skip to content

Windows 11: introduce support for Voice Access (NVDA installed on Windows 11 Version 22H2 and later)#18322

Merged
seanbudd merged 10 commits into
nvaccess:masterfrom
josephsl:i16862w11VoiceAccess
Jun 25, 2025
Merged

Windows 11: introduce support for Voice Access (NVDA installed on Windows 11 Version 22H2 and later)#18322
seanbudd merged 10 commits into
nvaccess:masterfrom
josephsl:i16862w11VoiceAccess

Conversation

@josephsl

Copy link
Copy Markdown
Contributor

One of the possibilities after #18220 merge:

Link to issue number:

Closes #16862
Closes #17384

Summary of the issue:

NVDA does not support Windows 11 Voice Access features including text dictation announcement from everywhere.

Description of user facing changes:

Introduces support for Windows 11 Voice Access, including text dictation, microphone toggle announcement, and mouse and touch interaction. Requires NVDA to be installed.

Description of developer facing changes:

Added voiceaccess.py app module, based on #18220 work.

Description of development approach:

The new Voice Access app module includes:

  • isGoodUIAWindow: says "yes" for "Voice Access" window class name (enables mouse and touch interaction)
  • Should process UIA notification event says "yes" as Voice Access notification elements do not have native window handle
  • UIA notification event will announce display string from everywhere.

Testing strategy:

Manual and requires NVDA to be installed:

  1. Enable and run Voice Access on Windows 11.
  2. When Voice Access screen appears, try toggling microphone by saying "microphone sleep". Observe that NVDA announces toggle state of microphone.
  3. Move to a text field (say, Notepad) and dictate text. Observe that NVDA echoes back dictated text.

Known issues with pull request:

As Voice Access requires admin privileges, this app module will not work on portable and temporary (installer) copies of NVDA. This limitation is documented in the user guide as an example of an app with admin privileges. Further, as dictated text will be announced from everywhere, users should be advised to wear headphones when dictating (for privacy) unless the situation does allow echoing of text to be acceptable.

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

@coderabbitai summary

josephsl added 5 commits June 24, 2025 18:03
…oin processing accepted. Re nvaccess#16862.

Windows 11 Version 22H2 (2022 Updat2/build 22621) introduces Voice Access as a replacement for Windows Speech Recognition. As part of its work, Voice Access raises UIA notification to announce messages including microphone toggle status and dictated text. However, these elements do not have native window handle, cuaisng NVDA to drop these events. Therefore, employing the just introduceg 'shouldProcessUIANotificationEvent' API, say 'yes' when Voice Access app module is asked to handle notification events. Doing so allows Voice Access status such as microphone toggle to be announced while the app is focused.
…rywhere. Re nvaccess#16862, nvaccess#17384.

One of the functions of Voice Access is text dictation. In order to do so, a user must focus on a text field and start dictating. Interestingly, this means the user will not focus on Voice Access, causing NVDA to not announce dictated text because the base UIA object implementation stops notification event handling if focused somewhere other than the app the notification is coming from. Therefore, let Voice Access inform NVDA that it will announce display string (including dictated text) from the app module, thereby letting Voice Access notifications come through while using apps in scenarios such as text dictation.
…ccess. Re nvaccess#16862.

Allow moues and touch interaction to work in Voice Access interface (window class name: Voice Access).
…on with admin privileges and thus requiring NVDA to be installed. Re nvaccess#16862, nvaccess#17384
@josephsl josephsl requested review from a team as code owners June 25, 2025 00:32
Comment thread source/appModules/voiceaccess.py Outdated
Comment thread source/appModules/voiceaccess.py Outdated
Comment thread user_docs/en/userGuide.md Outdated
@josephsl

josephsl commented Jun 25, 2025 via email

Copy link
Copy Markdown
Contributor Author

@josephsl

josephsl commented Jun 25, 2025 via email

Copy link
Copy Markdown
Contributor Author

@josephsl

Copy link
Copy Markdown
Contributor Author

Hi,

On second thoughts, I think the comment on installed copy requirement can be removed as the app module won't work properly in portable NVDA anyway (this is also the case for Task manager and other apps that require admin privileges for full functionality). But the user guide example should be kept as Voice Access is indeed an app requiring admin rights for full functionality.

Thanks.

josephsl added 4 commits June 24, 2025 20:26
…vaccess#16862.

Voice Access app module will not work with portable NVDA due to lack of admin rights (UI Access) by default. While the source code comment on instlaled copy requirement is removed, the portable copy restriction will remain in the user guide (so that Voice Access can be used as an example of an app with portable copy restrictions).
…ed. Re nvaccess#16862.

Review form Sean Budd (NV Access): check to make sure there is something to say (display string is not None) before invoking ui.message.
Recommended by Sean Budd (NV Access): split examples of apps requiring admin rights onto sublists for readability. That way future user guide edits can add more exmaples in additoin to Windows 11 Voice Access.
Comment thread user_docs/en/userGuide.md

@Qchristensen Qchristensen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

@seanbudd seanbudd merged commit 1b52ce7 into nvaccess:master Jun 25, 2025
14 of 15 checks passed
@github-actions github-actions Bot added this to the 2025.2 milestone Jun 25, 2025
@josephsl josephsl deleted the i16862w11VoiceAccess branch June 25, 2025 13:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants