[jawsscripts] Re: dlgList of buttons

  • From: Mario Brusco <mrb620@xxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Fri, 1 Oct 2010 12:10:32 -0400

hi Martin, yep, your code works very well. and one does have to bare in mind 
about which mode they're working in. naturally some functions will be 
unavailable because they're just not applicable in that mode. Good job!

It would be good to filter out those functions which are grayed at the point 
when the list is being built, in effect saying to the user "here are the 
buttons that are available." when the TestCalc is being used. If you didn't 
do so already.

Do you think there's further refinement that could be done?

----- Original Message ----- 
From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
To: "JAWSScripts" <jawsscripts@xxxxxxxxxxxxx>
Sent: Friday, October 01, 2010 11:09 AM
Subject: [jawsscripts] Re: dlgList of buttons


Hi Mario,

  There was a problem with some of the button windows which were included in
the
list.  Some of the buttons were not always visible, depending on the
state of the Hex/Dec/Oct/Bin radio button, and one was a group box with a
class of Button but no text visible.  These all have to be avoided when
constructing the list of buttons.  The code below seems to work:

Const
sep = "\007"
Script testCalc ()
var
    String sButtons,      ;list of button names
    String sHandles,     ;list of button handles
    int iIndex,               ;index of button in dialog list
    handle hW             ;handle for window of interest

; find the first child button of Calc Main Window
let hW = FindWindow (GetAppMainWindow (GetCurrentWindow ()), "Button", "")

; if current window has the class Button and is visible
; but ignore "non-button" Buttons
; and ignore obscured windows
; save its handle and name to separate lists
; then step to the next window at this level

while (hW)
    if (StringContains (GetWindowClass (hW), "Button")) then
        if (not IsWindowObscured (hW)) then
            if (not (GetWindowName (hW) == "")) then
                let sHandles = sHandles + IntToString (hW) + sep
                let sButtons = sButtons + GetWindowName (hW) + sep
            endif
        endif
    endif
let hW = GetNextWindow (hW)
endwhile

; request index of required button from dialog list
let iIndex= dlgSelectItemInList (sButtons, "Calculator Buttons", 0, 1)

; find corresponding handle
let hW = StringToHandle (StringSegment (sHandles, sep, iIndex))

; make sure JAWS cursor is inside Calc main window
RouteJAWSToPc ()

; Move JAWS cursor to button
; and indicate if the move was unsuccessful
if (not MoveToWindow (hW)) then
    sayString ("no, no, no")
endif

; give the cursor time to move and do a left click
Pause ()
LeftMouseButton ()

; give calculator time to respond
; and change back to PC Cursor
Pause ()
PCCursor ()
SayChunk ()
EndScript

Martin


----- Original Message ----- 
From: "Mario Brusco" <mrb620@xxxxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Tuesday, September 28, 2010 5:44 PM
Subject: [jawsscripts] Re: dlgList of buttons


> "when you search for
> the equals key in the dialog list as the final step and activate that?"
> JAWS says 253. weird, isn't it?
>
> ----- Original Message ----- 
> From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Tuesday, September 28, 2010 11:06 AM
> Subject: [jawsscripts] Re: dlgList of buttons
>
>
> Hi Mario,
>
>  I should say that I only tested my code on the simple display, and that
> when I try the scientific view, my code presses the wrong buttons in a
> systematic way which I haven't got to the bottom of yet.  Having said
> that,
> I would say that you haven't completed the key sequence for your chosen
> example.  Pressing enter to choose five only inserts five into the
> display,
> it doesn't complete the calculation.  What do you get when you search for
> the equals key in the dialog list as the final step and activate that?
>
>  Martin
>
>
> ----- Original Message ----- 
> From: "Mario Brusco" <mrb620@xxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Tuesday, September 28, 2010 3:38 PM
> Subject: [jawsscripts] Re: dlgList of buttons
>
>
>> Hey Martin, your TestCalc script works like you said, but still doesn't
>> give
>> me the expected result. For example, 2^5=32, but when entering 2, hit the
>> hotkey to call the TestCalc script, type x to get the x^y choice, press
>> enter key, then type 5 and press enter, 5 is announced. Meaning that it
>> doesn't perform the intended calculation, because if you type 2, use the
>> JAWSCursor to find and click the x^y button,activate PCCursor,  type 5
>> and
>> then enter or =, 32 is announced.
>>
>> I've also noticed after pressing the testCalc hotkey, the 2 in the
>> display
>> changes to a ).
>>
>> I'm wondering if an additional move to is needed before the left click
>> would
>> fix the problem? just an idea.
>>
>> ----- Original Message ----- 
>> From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
>> To: "JAWSScripts" <jawsscripts@xxxxxxxxxxxxx>
>> Sent: Tuesday, September 28, 2010 7:26 AM
>> Subject: [jawsscripts] Re: dlgList of buttons
>>
>>
>> Hi Mario,
>>
>>  The FindWindow function seems to be a problem.  Once I got the dialog
>> list
>> working, I found that FindWindow would not reliably take me to the named
>> button: it stopped at the first button it found which contained the
>> desired
>> name as a substring.  So I had to complicate matters by saving an
>> additional
>> list of button handles as I iterated through the collection.  See below.
>> This code is working on my version of Calc under XP Home:
>>
>> Const
>> sep = "\007"
>>
>> Script testCalc ()
>> var
>>    String sButtons,      ;list of button names
>>    String sHandles,     ;list of button handles
>>    String sItem,           ;name of chosen button
>>    int iIndex,                ;index of button in dialog list
>>    handle hW              ;general window handle
>>
>> ; find the first child button of Application Main Window
>> let hW = FindWindow (GetAppMainWindow (GetCurrentWindow ()), "Button",
>> "")
>>
>> ; if current window has the class "Button"
>> ; save its handle and name to separate lists
>> ; then step to next window at this level
>> while (hW)
>>    if (StringContains (GetWindowClass (hW), "Button")) then
>>        let sHandles = sHandles + IntToString (hW) + sep
>>        let sButtons = sButtons + GetWindowText (hW, false) + sep
>>    endif
>>    let hW = GetNextWindow (hW)
>> endwhile
>>
>> ; request index of required button from dialog list
>> let iIndex= dlgSelectItemInList (sButtons, "Calculator Buttons", false,
>> 1)
>>
>> ; find corresponding handle
>> let hW = StringToHandle (StringSegment (sHandles, sep, iIndex))
>>
>> ; Move JAWS cursor to button automatically
>> MoveToWindow (hW)
>>
>> ; give the cursor time to move and do a left click
>> Pause ()
>> LeftMouseButton ()
>>
>> ; give calculator time to respond, change back to PC Cursor
>> ; and speak result in calculator display
>> Pause ()
>> PCCursor ()
>> SayChunk ()
>> EndScript
>>
>>  hth
>>
>> Martin
>>
>>
>>
>> ----- Original Message ----- 
>> From: "Mario Brusco" <mrb620@xxxxxxxxxxx>
>> To: <jawsscripts@xxxxxxxxxxxxx>
>> Sent: Tuesday, September 28, 2010 3:04 AM
>> Subject: [jawsscripts] Re: dlgList of buttons
>>
>>
>>> Hi Martin, inserting your while code brings up a empty list, no items
>>> (buttons). Now to get the button names in there. have any suggestions?
>>>
>>> ----- Original Message ----- 
>>> From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
>>> To: "JAWSScripts" <jawsscripts@xxxxxxxxxxxxx>
>>> Sent: Monday, September 27, 2010 6:01 PM
>>> Subject: [jawsscripts] Re: dlgList of buttons
>>>
>>>
>>> Hi Mario,
>>>
>>>  The line in your original code which I mentioned before as being
>>> commented
>>> out is actually in the wrong place.  As it stands, you will only look at
>>> the
>>> next window
>>> if the first window you find is a button.  Try this:
>>>
>>> while ((hW) && not IsKeyWaiting ())
>>>  if (GetWindowSubTypeCode (hW) == 1) then
>>>    let sList = sList + GetWindowName (hW) + sep
>>>  endIf
>>>  let hW = GetNextWindow (hW) ;this now happens whether you find a button
>>> or
>>> not
>>> endWhile ;
>>>
>>>  hth
>>>
>>> Martin
>>>
>>> ----- Original Message ----- 
>>> From: "Mario Brusco" <mrb620@xxxxxxxxxxx>
>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>> Sent: Monday, September 27, 2010 10:06 PM
>>> Subject: [jawsscripts] Re: dlgList of buttons
>>>
>>>
>>>> hi David, which code are your comments referring to, the first or
>>>> Jackie's?
>>>>
>>>> I've added an iCount variable into the while loop as follows:
>>>>
>>>> var int iCount,
>>>> bla bla bla
>>>> while ... && iCount<100
>>>> bla bla bla
>>>> let iCount= iCount+1
>>>> EndWhile
>>>>
>>>> now a jawskey+control+b results as the script not being recognized
>>>> (shouldn't it be a >100?). but I like your idea too. Exactly where and
>>>> how
>>>> would it be implemented without the iCount stuff?(exact code please as
>>>> I
>>>> am
>>>> not a true scripter).
>>>>
>>>> I cringe when I need to force boot to get jaws back, and I'd like a
>>>> sure
>>>> fire way to prevent jaws from hanging.
>>>> ----- Original Message ----- 
>>>> From: "David Farough" <David.Farough@xxxxxxxxxxxxx>
>>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>>> Sent: Monday, September 27, 2010 2:02 PM
>>>> Subject: [jawsscripts] Re: dlgList of buttons
>>>>
>>>>
>>>> hi Mario;
>>>> You could always add the Not IsKeyWaiting () condition to your while
>>>> loop.  This will terminate the loop as soon as you hit a key.
>>>>
>>>> In the final FindWindow, you should only specify one value in the
>>>> arguments,  You can specify "" (null string )   . for the class and the
>>>> name for the window you are looking for.
>>>>
>>>>
>>>> David Farough
>>>> Application Accessibility Coordinator/coordonateur de l'accessibilité
>>>> Information Technology Services Directorate /
>>>> Direction des services d'information technologiques
>>>> Public Service Commission / Commission de la fonction publique
>>>> Email / Courriel:  David.Farough@xxxxxxxxxxxxx
>>>> Tel. / Tél:    (613) 992-2779 >>> Mario Brusco <mrb620@xxxxxxxxxxx>
>>>> 01:00 PM Monday, September 27, 2010 >>>
>>>> Nope, still hangs. hmm, I'm wondering if there's a way to avoid the
>>>> hanging
>>>> without interfering the intended function of the script, sort of a
>>>> safety
>>>> out? I'm wary of forcing to turn off the PC (by holding the power
>>>> button
>>>> down until the PC shuts down (cold boot)) in order to get speech back;
>>>> I've
>>>> had to do this too many times.
>>>>
>>>> ----- Original Message ----- 
>>>> From: "Jackie McBride" <abletec@xxxxxxxxx>
>>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>>> Sent: Monday, September 27, 2010 12:11 PM
>>>> Subject: [jawsscripts] Re: dlgList of buttons
>>>>
>>>>
>>>> Mario, let's revise the while loop, as follows:
>>>>
>>>> var
>>>> String sList, ;will contain list of buttons
>>>> String sItem, ;will contain the desired button name
>>>> int iIndex, ;contains number of button selected
>>>> handle hW ;contains window handles
>>>> let hW= FindWindow (GetAppMainWindow (GetCurrentWindow ()), "Button",
>>>> "")
>>>> ;looks for a type (Button), starting from main window
>>>> while (hW) ;while valid window handle found
>>>> if GetWindowSubTypeCode (hW)== 1 then ;it's a button,gets name of
>>>> button and
>>>> adds it to the list, as well as the \007 item separator
>>>> let sList= sList+GetWindowName (hW)+sep
>>>>
>>>> endIf
>>>> ;let hW= GetNextWindow (hW) ;go to next window
>>>> endWhile ;displays the list of buttons from which to pick, iIndex
>>>> returns
>>>> the button number
>>>> let iIndex= dlgSelectItemInList (sList, "calculator buttons", 1) ;gets
>>>> the
>>>> name of the button selected
>>>> let sItem= stringSegment (sList, sep, iIndex)
>>>> let hW= FindWindow (GetAppMainWindow (GetCurrentWindow ()),
>>>> "Button", sItem)
>>>> if hW then ;valid window handle
>>>> SetFocus(hw)
>>>> TypeKey("space")
>>>> else
>>>> SayMessage (OT_MESSAGE, "window not found")
>>>> endIf
>>>>
>>>> EndScript
>>>>
>>>>
>>>> On 9/27/10, Mario Brusco <mrb620@xxxxxxxxxxx> wrote:
>>>>> hi scripters, I am trying to adapt the following code to retrieve a
>>>> list
>>>>> of
>>>>> the Windows calculator buttons whether it is in standard or
>>>> scientific
>>>>> mode,
>>>>> whether the buttons are disabled or not. It seems to hang at some
>>>> point.
>>>>> can
>>>>> someone please help to get it working for me? Maybe the problem is in
>>>> the
>>>>> while loop? I dabble lightly and am not a true scripter yet, so I
>>>> need
>>>>> actual code:
>>>>>
>>>>> const
>>>>> sep = "\007"
>>>>>
>>>>> Script GetButton ()
>>>>> ;control+jawskey+b
>>>>> ; gathers the buttons in a window into a list, user can use arrows to
>>>> use
>>>>> the arrow keys and enter key to select a function
>>>>> ; works in any window/dialog
>>>>> var
>>>>> String sList, ;will contain list of buttons
>>>>> String sItem, ;will contain the desired button name
>>>>> int iIndex, ;contains number of button selected
>>>>> handle hW ;contains window handles
>>>>> let hW= FindWindow (GetAppMainWindow (GetCurrentWindow ()), "Button",
>>>> "")
>>>>> ;looks for a type (Button), starting from main window
>>>>> while (hW) ;while valid window handle found
>>>>> if GetWindowSubTypeCode (hW)== 1 then ;it's a button,gets name of
>>>> button
>>>>> and
>>>>> adds it to the list, as well as the \007 item separator
>>>>> let sList= sList+GetWindowName (hW)+sep
>>>>> ;let hW= GetNextWindow (hW) ;go to next window
>>>>> endIf
>>>>> endWhile ;displays the list of buttons from which to pick, iIndex
>>>> returns
>>>>> the button number
>>>>> let iIndex= dlgSelectItemInList (sList, "calculator buttons", 1)
>>>> ;gets the
>>>>> name of the button selected
>>>>> let sItem= stringSegment (sList, sep, iIndex)
>>>>> SaveCursor ()
>>>>> JAWSCursor ()
>>>>> RouteJAWSToPc ();finds the button & gets its handle
>>>>> let hW= FindWindow  (GetAppMainWindow (GetCurrentWindow ()),
>>>>> "ThunderRT6CommandButton", sItem)
>>>>> if hW  then ;valid window handle
>>>>> if MoveToWindow (hW) then ;move to the window whose handle u just
>>>> got
>>>>> LeftMouseButton ()
>>>>> Else
>>>>> SayMessage (OT_MESSAGE, "cannot move to button")
>>>>> endIf
>>>>> else
>>>>> SayMessage (OT_MESSAGE, "window not found")
>>>>> endIf
>>>>> RestoreCursor ()
>>>>> EndScript
>>>>>
>>>>> __________
>>>>>
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/jawsscripts
>>>>>
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Change the world--1 deed at a time
>>>> Jackie McBride
>>>> Scripting Classes: http://jawsscripting.lonsdalemedia.org
>>>> homePage: www.abletec.serverheaven.net
>>>> For technophobes: www.technophoeb.com
>>>> __________
>>>>
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/jawsscripts
>>>>
>>>>
>>>> __________
>>>>
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/jawsscripts
>>>>
>>>>
>>>>>
>>>> This e-mail message is intended for the named recipient(s) and may
>>>> contain information that is privileged, confidential and/or exempt from
>>>> disclosure under applicable law. Unauthorized disclosure, copying or
>>>> re-transmission is prohibited. If you are not a named recipient or not
>>>> authorized by the named recipient(s), or if you have received this
>>>> e-mail in error, then please notify the sender immediately and delete
>>>> the message and any copies.
>>>> >
>>>> Ce courriel est destiné exclusivement au destinataire mentionné en
>>>> titre
>>>> et peut contenir de l'information privilégiée, confidentielle ou
>>>> soustraite à la communication aux termes des lois applicables. Toute
>>>> divulgation non autorisée, toute reproduction ou réacheminement est
>>>> interdit. Si vous n'êtes pas le destinataire de ce courriel, ou n'êtes
>>>> pas autorisé par le destinataire visé, ou encore, si vous l'avez reçu
>>>> par erreur, veuillez le mentionner immédiatement à l'expéditeur et
>>>> supprimer le courriel et les copies.
>>>>
>>>> __________?
>>>>
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/jawsscripts
>>>>
>>>>
>>>> __________?
>>>>
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/jawsscripts
>>>>
>>>>
>>>
>>> __________�
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>>
>>> __________�
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>

__________�

View the list's information and change your settings at
//www.freelists.org/list/jawsscripts


__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: