JAWS Scripts For Skype - Frequently Asked Questions - Continuous SkypeWatch Status Announcements In Windows Calculator

General Information

Support for these scripts is primarily provided in the following places, most preferred first:

SkypeEnglish Mailing List
Public forum in which blind Skype users can help each other.
@dlee_code on Twitter
The script author's low-traffic Twitter account for project (including script) announcements and limited technical support.

This page is laid out for easy navigation via JAWS:

This will explain the problem experienced by users of JAWS versions 8.0 and older when running the Windows Calculator and having SkypeWatch announce status changes.

Problem Description

Users of the Windows Calculator sometimes hear their Skype status announced continuously, once every five seconds, while the Calculator is in focus.

Systems and Users Affected

For this problem to occur, all of the following must be true:

  1. The user must be running a JAWS version older than 9.0. Early JAWS 9.0 versions may also be affected, but current ones are not.
  2. The user must be running SkypeWatch from Skype script revision 618 or later.
  3. The "Automatically Speak Your Online Status" option in Skype's Verbosity Settings list must be set to "Enabled."
  4. The Windows Calculator must be in focus.
If all these conditions are met, JAWS will most likely say something like, "Skype status Online" every five seconds until focus is moved out of the Windows Calculator.

Cause of Problem

The Windows Calculator scripts were first written many years ago, probably before JAWS 3.70. A function called StringCompare was included in the scripts starting in JAWS 3.71 or so. In JAWS 6.10 or so, a StringCompare function was added to JAWS itself. Unfortunately, the two StringCompare functions do not work in the same manner. When a background script like SkypeWatch calls StringCompare, it expects the JAWS built-in function to respond; but when the Windows Calculator is in focus, the Calculator script version responds instead. The StringCompare function is often used to determine if two strings are exactly equal. The built-in StringCompare function returns 0 if they are equal, whereas the Calculator scripts' version of StringCompare return 1 in that case.

In layman's terms, this leaves us with something like the following confusing situation: You're texting with a friend in Skype. One day, a third party quietly replaces your friend's JAWS dictionary file with one that changes "yes" to "no" and vice versa, but neither of you are aware of this. Your friend asks if you want to go out for a drink, and you say "yes," only your friend hears "no" because of the dictionary change. Your friend then asks, "Why not?" and you try to respond, "I said 'yes,'" but again the "yes" becomes "no," so your friend hears, "I said 'no.'" The conversation would get quite interesting from there, as I'm sure you can imagine! This is very much like what's actually happening: SkypeWatch asks if the last-announced status is the same as the current one, but the Windows Calculator scripts return the opposite of the expected result, so SkypeWatch understands that it must now announce the "new" status to the user. The same thing happens again five seconds later when SkypeWatch checks the current status again, etc. This StringCompare problem can also affect any other set of running scripts, including those in default.jss.

Why does this problem not affect older Skype script versions?

Older Skype script versions did not use StringCompare because they, like the Calculator scripts, were initially written for older JAWS versions that did not have that function available. (I wrote my own equivalent at the time, called olStringsEqual.) Starting in Skype script revision 618, though, I am using more built-in JAWS functions instead of home-brewed script functions because this improves the speed of the scripts, sometimes by quite a lot.

Workaround

The quickest workaround, other than to use JAWS 9, is to disable the announcement of changes in your online status. To do this,

  1. Focus Skype.
  2. Type JAWSKey+V to bring up the JAWS Verbosity list.
  3. Arrow down to the otpion called "Automatically Speak Your Online Status," and press Space to disable it if it currently says "Enabled."
  4. Close the JAWS Verbosity list with Enter or Esc.

Solution

Unfortunately, the proper solution to this problem requires changes to the scripts for the Windows Calculator. Instructions for making the required changes manually appear below. As a nice exercise for budding programmers, I invite submissions of automated solutions to this problem, provided they are smart enough to work under at least JAWS 6.0 through 8.0 and to detect when they have nothing to do, such as when the user is running JAWS 9 or has already fixed the Calculator scripts. Anyone undertaking this exercise should be aware, though, that there are multiple script files involved, corresponding to different versions of the Windows Calculator for different versions of Windows.

To fix this problem yourself, do the following. Warning: Do this at your own risk. The risk is low, but a mistake could cause the Windows Calculator scripts to stop working correctly, rendering the Calculator itself difficult or impossible to use with JAWS.

  1. Open the Windows Calculator in your usual manner.
  2. Type JAWSKey+0 (the 0 on the row of numbers, above the letter p). This will open the JAWS Script Manager with the Windows Calculator scripts loaded into it.
  3. Type Ctrl+H to bring up the Replace dialog.
  4. In the "Find what" box, type "StringCompare" without the quotes and then press Tab once to move to the next field.
  5. In the "Replace With" box, type "StringCompareWithoutCase" without the quotes (this is the name of this function starting in JAWS 9 anyway).
  6. Tab several times until you reach the "Replace All" button, then press Space to activate it. You might hear an error-like beep at this point because JAWS produces that on completing the replace operations. This is normal and harmless.
  7. Press Esc to close the Replace dialog and return to the Script Manager.
  8. Type Ctrl+S to compile the updated script file. You should hear a non-error beep and usually the phrase, "Compile complete." This may take several seconds on some systems. Shortly thereafter, the Script Manager should again receive focus.
  9. Type Alt+F4 to close the Script Manager and return to the Windows Calculator. Things should now work without all the extra announcements.