Ah yes, good point there, Doug. That'll keep things safe in case anybody monkeys with control ID's without my knowledge. <grin>. On Sun, 6 May 2012 19:30:28 -0400, you wrote: >My normal way to handle that, at least when looping through windows, >is to stop if the window handle I get back is null. In this script, >you can do that by changing the While line to read > >while x && hWin1 > >This works because hWin1, when treated as a boolean value like that, >will return True if non-empty and False when empty; and >getNextWindow() returns null when it runs out of windows. > >If you do get stuck in an infinite loop in a modern JAWS version >though, you can escape it and shut down JAWS by typing >Insert+Windows+F4. > >On Sun, May 06, 2012 at 07:14:42PM -0400, Andrew Hart wrote: >Correct me if I am wrong, but the while loop in this code makes me >nervous as it seems rather dangerous. The only way in which it can >terminate is if a window with the desired control id is found. >If the loop runs out of sibling windows to search, hWin1 and hWin2 will >end up with the value 0, but x will never get set to False. >In that case, the script will continue looping for ever, thus hanging JAWS. > >If the window is guaranteed to exist, this is ok, but it would be good >coding practice to include another loop termination condition as a >safety net in case the application decides to behave badly or a future >update to the application removes the guarantee that the window is >always in the expected place. The termination condition could be a >simple counter to prevent the while loop iterating more than some >limited number of times that is considered reasonable (e.g. 10 or 20 >iterations would probably suffice). > >Btw, if anything were to go wrong and the script failed to locate a >window with the desired control id, the only way to recover from the >infinite loop would be to punch the off button on the machine. I have >managed to drop JAWS into infinite loops on numerous occasions (due to >an error in programming logic) and the result is not pretty and >definitely an occasion for slapping one's forehead and thinking "idiot!" > Every time I do this I feel like that bowl of petunias in Douglas >Adam's the Hitch-Hiker's Guide to the Galaxy: "Oh no, not again." > >Hth, >Andrew. > >On 6/05/2012 5:30 PM, Steve Matzura wrote: >> An interesting take. Problem is, if the window isn't there, what kind >> of error will I get back from the calling line? >> >> Anyway, I did solve the problem, and here's the script for it. Sorry >> about the bad line-wrapping. >> >> include "hjconst.jsh" >> >> Script FocusSearchList () >> >> ; This script, attached to CTRL+Shift+L, ensures >> ; PC cursor is on a particular control before doing anything else. >> >> var handle hWin1, handle hWin2, >> int x >> >> let hWin1 = GetCurrentWindow () >> if GetControlID (hWin1) != 1001 >> then >> SayMessage (ot_jaws_message, "Place the PC Cursor on >> the search edit field before executing this script.", "PC Cursor to >> search field first.") >> return >> endif >> >> let hWin1 = GetParent(hWin1) ; Go up one level. >> let x = TRUE >> >> while x >> >> let hWin2 = GetNextWindow (hWin1) ; Go right one window. >> if GetControlID (hWin2) == 1019 ; Window not accessible via normal tab >> ; controls >> then >> SetFocus (hWin2) ; Force the PC Cursor to that window. >> let x = FALSE ; Terminate the while condition. >> else >> let hWin1 = hWin2 >> ; Save the current window handle for the next go-round. >> >> Endif >> >> EndWhile >> >> ; Script should always find the window with control ID 1019 this way. >> ; Question: What value would hWin2 have if it got to the >> ;rightmost window and couldn't find the one with control ID 1019? >> >> EndScript >> >> >> On Sun, 6 May 2012 08:05:10 -0700, you wrote: >> >>> You can use the function IsWindowVisible() >>> That will tell you if it is present or visible rather. >>> John >>> -----Original Message----- >>> From: jawsscripts-bounce@xxxxxxxxxxxxx >>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Steve Matzura >>> Sent: Sunday, May 06, 2012 7:34 AM >>> To: jawsscripts >>> Subject: [jawsscripts] An interesting scripting problem >>> >>> I'm scripting an application that has a window that's sometimes there, >>> sometimes not. The first order of business is to check if the window is >>> there, and if it is, set focus to it. I know the control ID of the window, >>> 1019. I'm trying to use FindDescendantWindow with a start handle of 0 to >>> verify its existence. My script so far looks like this: >>> >>> Script ReadSearchStatus () >>> >>> var handle hwin >>> >>> let hwin = FindDescendantWindow (0, 1019) >>> >>> if hwin > 0 >>> then >>> Say ("search window present.", ot_jaws_message, false) >>> >>> ; Insert code to set focus to the window. Should I even bother ; with this? >>> ; Should I just try setting focus and if it fails, assume the window's ; not >>> present? >>> >>> else >>> Say ("search window is not present.", ot_jaws_message, false) >>> >>> endif >>> >>> EndScript >>> >>> The problem is, it always comes up saying the window is present, even when >>> it's not. >>> __________o?= >>> >>> 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