[jawsscripts] Re: dlgList of buttons

  • From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
  • To: "JAWSScripts" <jawsscripts@xxxxxxxxxxxxx>
  • Date: Fri, 1 Oct 2010 16:09:55 +0100

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

Other related posts: