Topics

reading RawInput from an NVDA addon


Venkatesh Potluri
 

Hi List,

Is it possible to access Windows's RawInput events, and the corresponding data for different input devices from NVDA? Specifically, will I be able to do this in an AppModule or a GlobalPlugin? If this is possible, pointers to addons or code samples where this is done would be of great help.

Thanks in advance for any help.

Best regards, Venkatesh


James Scholes
 

You can register an invisible window and handle your own messages via the WXPython toolkit used for NVDA's other GUI elements:

https://wiki.wxpython.org/HookingTheWndProc

Here's an example of an app module for Spotify which uses this technique to register a clipboard observer:

https://www.dropbox.com/s/k67jg8bsw5ejzd2/spotify.py?dl=1

It would help to know your level of familiarity and comfort with Win32, Python, WXPython and NVDA add-on development to provide further insights. I don't have any specific experience with raw input, but if you are comfortable implementing your own message handling procedure you should have everything you need. And of course, the window need not be invisible; it can be a standard WXPython frame with actual controls on it. Just make sure you don't block any standard Windows messages in your custom WNDProc.

Regards,

James Scholes

On 05/11/2020 at 12:29 pm, Venkatesh Potluri wrote:
Hi List,

Is it possible to access Windows's RawInput <https://docs.microsoft.com/en-us/windows/win32/inputdev/raw-input>; events, and the corresponding data for different input devices from NVDA? Specifically, will I be able to do this in an AppModule or a GlobalPlugin? If this is possible, pointers to addons or code samples where this is done would be of great help.

Thanks in advance for any help.

Best regards, Venkatesh


Venkatesh Potluri
 

Hi James,

Thank you so much for the very helpful information, and the pointers!

I would say I am very new to NVDA addon development and WXPython. I
played around with RawInput with their C++ API before however. I will
go through the provided examples, and get back with further questions.

Best, Venkatesh

On 11/5/20, James Scholes <james@jls-radio.com> wrote:
You can register an invisible window and handle your own messages via the
WXPython toolkit used for NVDA's other GUI elements:

https://wiki.wxpython.org/HookingTheWndProc

Here's an example of an app module for Spotify which uses this technique to
register a clipboard observer:

https://www.dropbox.com/s/k67jg8bsw5ejzd2/spotify.py?dl=1

It would help to know your level of familiarity and comfort with Win32,
Python, WXPython and NVDA add-on development to provide further insights. I
don't have any specific experience with raw input, but if you are
comfortable implementing your own message handling procedure you should have
everything you need. And of course, the window need not be invisible; it
can be a standard WXPython frame with actual controls on it. Just make sure
you don't block any standard Windows messages in your custom WNDProc.

Regards,

James Scholes

On 05/11/2020 at 12:29 pm, Venkatesh Potluri wrote:
Hi List,

Is it possible to access Windows's RawInput
<https://docs.microsoft.com/en-us/windows/win32/inputdev/raw-input>;
events, and the corresponding data for different input devices from NVDA?
Specifically, will I be able to do this in an AppModule or a GlobalPlugin?
If this is possible, pointers to addons or code samples where this is done
would be of great help.

Thanks in advance for any help.

Best regards, Venkatesh