[program-l] Re: How to get JAWS to act on cursor movement in VS 2013 if the movement is caused by something other than the arrow keys.

  • From: "RickUSA" <ofbgmail@xxxxxxxxx>
  • To: <program-l@xxxxxxxxxxxxx>
  • Date: Fri, 6 Jun 2014 06:43:03 -0400

Good luck. I have never scripted jaws, yet, so cant do more than comment on general UIA things and even then it has been a long time since I mucked with them. UIA is quite complicated to try and work with compared to using the native jaws hooks, my experience from scripting native UIA in WindowEyes. If you can do what you want without digging into UIA I think it will have a much less steap learning curve. I'm out guys - dont have anything else unless, until, I start using jaws and looking at how it may be scripted.

Rick USA
----- Original Message ----- From: "Kerneels Roos" <kerneels@xxxxxxxxx>
To: <program-l@xxxxxxxxxxxxx>
Sent: Thursday, June 05, 2014 3:37 PM
Subject: [program-l] Re: How to get JAWS to act on cursor movement in VS 2013 if the movement is caused by something other than the arrow keys.


Thanks a lot James, Rick, Soronel, really appreciate your comments and suggestions.

I suspected this, that jfw for the vs scripts respond to keyboard keys in order to know when to voice - at least in the editor window - but then it must also tie into UIA events because it is able to voice more complex and involved messages that are not triggered by any keyboard input, like to announce that the build completed (for example).

I'll try to handle the event you mentioned Soronel, and look for the CaretMoved event in the FSDN - should probably take a step back and study jfw scripting a bit first since it's not consistent with normal programming terminology: script, script, what is a script - it's all a script actually in my mind :-) Actually, it does get compiled, so it's not technically interpreted and thus not the same as a python or perl or php script. So in jfw scripting terminology, a script is a method that fires on some keyboard input?

Is the script with this starting lines the latest and greatest for vs:

;Copyright 2011-2013 Freedom Scientific, Inc.
include "hjconst.jsh"
include "hjglobal.jsh"
include "Visual Studio 2010.jsm"
include "Visual Studio 2010.jsh"
use "Visual Studio Internal.jsb"
globals
    int g_vsInCompletionsList,
    int g_vsDontSpeakNextFocusChange,

    ; We track based on a concatenation of VSEdition and major version
collection g_vsScriptsHaveAlreadyLoadedThisJawsSession




On 2014-06-05 05:29 PM, Soronel Haetir wrote:
Right, jaws mostly operates by hooking the keyboard and then firing
scripts rather than by responding to accessibility events.

One thing to note, as far as I am aware the MSAA to UIA bridge does
not even try to fire UIA events when the various properties change
(name, description etc).  The UIA model is quite powerful when a
program implements it (correctly) but there are enough that don't that
it simply is not a particularly good route for general screen reader
operation.

On 6/5/14, RickUSA <ofbgmail@xxxxxxxxx> wrote:
Hi Again Soronel: After ReReading your posting I understand what you ment.
The keyboard hooks you are talking about are JAWS watching for Keyboard
events like a key press and act on that in those cases where they are
defined and execute a script or block of code based on the press of a key
rather than on monitoring actual UIA events.
Thus tieing into these events, likely available in the JAWS scripting
language, would give a higher level access to handling these pre-defined
events in accordance with existing JAWS operations.
Sorry I missed that, guess I needed this second cup of coffee - smile.
Rick USA
----- Original Message -----
From: "Soronel Haetir" <soronel.haetir@xxxxxxxxx>
To: <program-l@xxxxxxxxxxxxx>
Sent: Wednesday, June 04, 2014 6:26 PM
Subject: [program-l] Re: How to get JAWS to act on cursor movement in VS
2013 if the movement is caused by something other than the arrow keys.


Actually, as far as text movement goes I am pretty sure it is the
selection changed event you would need to watch if that is the route
you want to use.  UIA treats normal cursor placement as a 0 length
selection.  But that also requires that the target program raise the
appropriate event.

I am pretty sure that is why FS uses keyboard hooks with fired scripts
rather than relying on accessibility based events, there are enough
programs that don't raise all the needed events in all the needed
places that you would have to hook the keyboard and do it on the front
end anyway so there isn't much of a point in doing all the work twice.

On 6/4/14, RickUSA <ofbgmail@xxxxxxxxx> wrote:
Also, UIA scripting has allot of events you can watch for and tie into
like

change in focus.
On a focus change you could perhaps test to see if you want to move the
object and if so move it, else skip it.
Rick USA
----- Original Message -----
From: "Soronel Haetir" <soronel.haetir@xxxxxxxxx>
To: <program-l@xxxxxxxxxxxxx>
Sent: Wednesday, June 04, 2014 4:20 PM
Subject: [program-l] Re: How to get JAWS to act on cursor movement in VS
2013 if the movement is caused by something other than the arrow keys.


The standard windows controls all implement UIA.  Also programs that
are written using the WPF have UIA capability (although the developers
often do not do the work to actually associate the needed text with
the controls, the control navigation itself is present).  There is
also a bridge that translates programs that only implement MSAA to a
UIA model, but with much less information than UIA is able since MSAA
simply doesn't provide as much.  For programs that have created their
own controls or frameworks it is entirely program dependent as to
whether accessibility information is available, but there also aren't
a lot of such programs since implementing lots of self-drawing window
classes is not a trivial task, especially when dealing with drawing
text.

On 6/4/14, Homme, James <james.homme@xxxxxxxxxxxx> wrote:
Hi,
Is UIA in use generally in Windows controls themselves, or is its use
application-dependent?

Thanks.

Jim


-----Original Message-----
From: program-l-bounce@xxxxxxxxxxxxx
[mailto:program-l-bounce@xxxxxxxxxxxxx]
On Behalf Of Soronel Haetir
Sent: Wednesday, June 04, 2014 11:32 AM
To: program-l@xxxxxxxxxxxxx
Subject: [program-l] Re: How to get JAWS to act on cursor movement in
VS
2013 if the movement is caused by something other than the arrow keys.

The main thing that makes scripting visual studio tricky is limiting
your scripts to just the parts of the interface that you are
interested in.  The actual UIA objects work very well.

And something to keep in mind about scripting SQL Server Management
Studio is that it is actually built on the visual studio isolated
shell so I would expect scripting that to be quite a bit easier, since
you would not have nearly as many potentially colliding UI areas to
eliminate.



On 6/3/14, RickUSA <ofbgmail@xxxxxxxxx> wrote:
Hi: Cant thelp with that but are you scripting Visual Studio?
I tried it using WindowEyes Scripting language and even UIA but found
it
quite complicated.
If scripting for jaws how well does JAWS Scripting language work to
script
Visual Studio? I am thinking of if scripting of Sql Server and other
MS
packages would be possible in JAWS.
Rick USA
----- Original Message -----
From: "Kerneels Roos" <kerneels@xxxxxxxxx>
To: "Program-l" <program-l@xxxxxxxxxxxxx>
Sent: Wednesday, June 04, 2014 3:45 AM
Subject: [program-l] How to get JAWS to act on cursor movement in VS
2013
if

the movement is caused by something other than the arrow keys.


Hi there.

I was wondering if anyone here could perhaps help me with a JAWS
scripting

issue. In VS 2013, when the cursor in the code editor moves, but
the move is caused by something other than the usual move actuators,
then

JAWS seems to know that the cursor moved if I press Alt+Del, but
nothing
is spoken
when the move happens.

Alt+Del reveals that the cursor is the PC cursor, and the line
number,
hence JAWS is aware of the line change, but no actual content is
voiced
when the line change via a cursor movement due to something other
than
the

arrow keys.

For example, if I move the cursor with the arrow keys, then each new
line

or character or whatever is read properly, but if I move the
cursor through say a plugin VsVim then JAWS can detect that the
cursor
moved, but it does not speak what it should - almost as if speech
output
is only
tied to the conventional move actuators - arrow keys in this case.

VsVim would move the cursor when the focus is in the code editor,
when
VsVim is in normal mode (by pressing esc key), and one of the VsVim
movement chars is hit (j for down, k for up, h for left, l for
right)
-
for example.

I had a look at the standard JAWS scripts from FS for VS, and there
is
quite a bit of code there, so this might also be interfering in some
way.

I noticed that this event:

either does not fire or is suppressed by other code in the scripts.

So, my question is this:
1. Are there any other events I could handle, events that fire when
the
PC

cursor is busy editing something and moving around.
2. How can I detect that the focus is in the code editor or output
window?
3. Are there some settings in JAWS I could give a try? I have
noticed
about a year before that Braille actually keeps up with the actual
cursor

position, no matter if the cursor position changed due to the usual
position changers (arrows) or due to something else. At the time I
was
unable to cause all Braille to be read out, which might be an
option,
but

it would be nice to have it working without requiring a Braille
display.

Any other helpful hints or info would be much appreciated. I don't
know
too much about JAWS scripting in general, and I don't really have
the
resources to embark on a full study of this since usually all works
well
enough.

Regards,
Kerneels


--
Kerneels Roos
Cell: +27 (0)79 696 6038
Tel: +27 (0)811 2108
LinkedIn: http://za.linkedin.com/in/kerneels

Skype: cornelis.roos

** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq


--
Soronel Haetir
soronel.haetir@xxxxxxxxx
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq

________________________________

This e-mail and any attachments to it are confidential and are
intended
solely for use of the individual or entity to whom they are addressed.
If
you have received this e-mail in error, please notify the sender
immediately
and then delete it. If you are not the intended recipient, you must
not
keep, use, disclose, copy or distribute this e-mail without the
author's
prior permission. The views expressed in this e-mail message do not
necessarily represent the views of Highmark, its diversified business,
or
affiliates.


--
Soronel Haetir
soronel.haetir@xxxxxxxxx
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq


--
Soronel Haetir
soronel.haetir@xxxxxxxxx
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq
** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq



--
Kerneels Roos
Cell: +27 (0)79 696 6038
Tel: +27 (0)811 2108
LinkedIn: http://za.linkedin.com/in/kerneels

Skype: cornelis.roos

** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq

** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq

Other related posts: