Or, to uninstall, see: UnInstall This is a set of powerful utilities which performs functions similar, but significantly superior to, the scripting mode utilities in jaws, intended for use by advanced script developers, who understand the hierarchical relationships in which windows and objects are arranged, and are comfortable withusing window handles, and peer, or parent/child relationships, to navigate from one window to the next. They allow you to explore even windows which are not presently visible, to rapidly traverse the windows hierarchy, learning all the key attributes of each window, and to determine the routing path to follow to get between two windows of interest, as well as many other very handy features, including the ability to set your utility window to a window containing your mouse cursor, set application focus to a window, and explore "chunks". You can even explore the windows hierarchy outside the application.
In this discussion, most key strokes use the alt+control+windows modifiers, all three held down at once. Since this is almost always the case, we have avoided repeating that fact at every hot key, just to make the document more readable. There are exceptions, and they will be noted. But, unless otherwise stated, assume all three held down at once. This is the default desktop configuration. If you change your assignments, please check the hot key help, normally alt+control+windows+h. You can use the modifiers on either end of the space bar, and jaws should be set up to not differentiate between left and right modifiers. However, it should be set up to differentiate between numPad and extended keys. these are done in the default configuration. Unless otherwise specified, all arrow keys are the NumPad keys.
However, this discussion assumes the non-layered desktop layout To a limited degree, even the desktop layout supports layered hot keys, assuming that your version of JAWS also supports layers. This allows you to press alt+control+windows+LeftBracket to enter the layer, and then to operate some of the jls keys without the need to hold down the alt+control+shift modifiers. When the layer is active, using the desktop layout, you can use the numPad arrow keys to move between windows, the numPad pageUp to set focus, or any of the numbers on the numbers row to quickly hear the value of a particular attribute. Any other key will exit the layer, and return to normal mode. However, it is not necessary to use the special layer at all if you don't want. Just be aware that using the layer has certain risks, until you become very familiary with it, since JAWS provides no notification that you have exited the layer, meaning that pressing keys not defined for the layer will close the layer, and cause those keys to be passed on to the application. If the layer closes, and you don't know it, then pressing keys that would work if the layer was active will not performed their layered function, and will also pass those keys on to the application, or any application scripts that might be attached to those keys.
Note, other utility tool boxes use a paradigm which is rotated 90 degrees from this, where you use up and down arros to move between peers, and left/right arrows to go between parent and child windows, much like a standard windows treeview. If you prefer that arrangement, you can modify the jkm file accordingly, and the hot key help will track along.
This set of utilities is linked into your default scripts through the use of a "use" statement. Hot keys are added to your default key map to allow activation of the utility functions from any application.
Once you get the utilities installed, Press the alt+control+windows+h key, and explore the list of available hot keys with your unmodified up and down arrow keys. Then press escape to return to your application.
The jls keys.txt file, which contains the hot keys you need to add to default.jkm is now divided into to two files for better convenience, jls desktop keys.txt and jls laptop keys.txt.
Provided a desktop version of a layered key interface, in case you prefer layered keys, instead of dedicating all the alt+control+windows keys to jls_utilities. See file JLS Layered Desktop Keys.txt However, even the straight desktop file contains some layered keys. Uses the alt+shift+windows+leftBracket layer, for the arrow keys, and for the numbers row direct access keys.
if sounds are enabled, jaws will play a special sound when you navigate to the window that currently has focus. The file played is HRTrack5.wav in the settings\enu\jls_audio folder.
Use the Numpad plus and minus keys to choose what attribute gets spoken. After making the selection, the value of the chosen attribute is automatically spoken as you move around. Press the NumPad 5 key to repeat the information, or double click it to place it in the virtual viewer, as well as on the clipboard.
One nice thing about this set is that you can use the utilities right along with your applications without changing any keyboard mode. For example, determine a control ID in your application, then switch to the script manager, find the appropriate editing point, then press the repeat last item hot key to have the control ID spoken again to make sure you didn't forget it. It will repeat the last item spoken, even if it was in a different application.
Double click the NumPad 5 key to place the spoken information in the virtual viewer. This also copies that same text to the clipboard so you can paste it into a script file if needed.
As you move from window to window, you can hear a short beep mixed with the speech if the window has at least one child. This feature is enabled and disabled with the backslash key, which also controls sounds for the window navigation functions, as well as the color change and window boundary functions described below.
There are four attributes in the rotation which report handle values:
The latter 3 of these items are handles which point to other windows. If you want to cause the utilities to jump to that window, just press the enter key, the main enter, not the numPad enter. The global handle will be set to the handle spoken for this attribute, and the item selecter will be forced to 0, your most commonly used attribute. You can then explore the attributes of the new window, using the NumPad plus and minus keys.
To return to the previous window, simply press the backspace key. the utilities global handle will be restored to it's previous value, and the item selection will also be returned to it's original value.
If you move the mouse to the utility window, and you have Highlighted Text selected as the output mode, the mouse will be moved to the first highlighted text in that window. If you have type and text selected as the output mode, and the window contains text, it will be moved to the first word of text. Otherwise, it is moved to the top left cornor of the window.
The code for this version of VirtualizeWindow is in file WindowNavigator.jss, and is provided with these scripts. There is already a version of this with jaws, and is used in the quicken Scripts.
To learn if these two windows are related, place the mouse cursor in one of the windows, and press the right mouse button. this will set the utility handle to the current window. Now, move the mouse cursor across the window border, through the small intermediate region, and into the second child window. you will hear the breaking glass with each border crossing. Once in the second child, press alt+control+shift+windows+f. This will cause a family comparison between the two children, one where the mouse resides, and the other where the utility handle is pointed. You will hear the sound effect indicating the relationship, even if sounds are turned off. This allows you to compare two windows which are not physically adjacent.
To place the present chunk on the clipboard, as well as in the virtual viewer, double click the six pack End key.
Function PositionInWindow, in file WindowNavigator.jss, can be used in the application scripts to use these constants, and will position the mouse accordingly. It is aware of the bias of 100000, and treats the number accordingly, using the appropriate window oedge as it's basis. In addition, constants are generated for the window control id, type and subtype code to aid in locating the handle of the window.
When you paste the clipboard, containing a label, into a script file, the name you typed for the label will have an underscore, plus the following suffixes appended to create a series of constants. The suffixes and meanings are as follows:
To specify pixel counts relative to the window edges, leave out the shift key. The shift key included means you are entering window relative percentages. But, absence of the shift key means pixel addresses from the top and left edges. To make an address relative to the bottom or right side, make that coordinant a negative number.
Remember, Window Relative percentages are horizontal and vertical distances in tenths of a percent of the corresponding window dimension.
Note that Jaws or invisible cursor must be active to do this.
once you have collected the snippets you want, press the c key to copy the internal buffer to the clipboard and clear the internal buffer. then, you can paste the standard windows clipboard wherever you like.
If you are in object mode, the utility object is marked instead, and returning will return to that object.
Set the utility window to your starting point, and place the mouse in the window that is the ending point of the navigation. Then press the six pack home key. The virtual viewer displays the series of steps required. Press enter on the link at the bottom of the page, and a new virtual window opens, showing you the code generated. this entire code fragment is placed on your clipboard. but, if you like, you can select portions of the code, and copy only that part to the clipboard with the control+c key, overwriting the bulk copy which was done automatically. Press escape to close that window and return to your application. Now, you can go to the appropriate point in your script file, and paste the clipboard to get code to which you can provide the handle of the starting window, and which will find the handle of the ending window.
Because this is a very complex task, this function does not always produce correct results, but it's pretty darn close.
For example, suppose your mouse cursor is positioned in a data sheet of some kind, and is on a line at the top of this data sheet which contains a series of headers. Further down the screen, and yet inside this data sheet, is a series of edit box windows which are positioned so as to visually line up with the various headers at the top of the data sheet. You want to keep the mouse cursor on the same line with the headers, but to adjust the left right position to line up with the left edge of one of those edit boxes down below. Piece of cake.
Use the JLS navigation keys to position the utility to the edit window of interest. The mouse cursor is not affected, only the global window handle will be adjusted. Now, press the extended left arrow. The horizontal position of the mouse is adjusted to line up with the left side of the edit box, but the vertical position is not changed. So, the jaws cursor is still outside the edit box, but it is directly above the left edge of the edit box. If you double clicked the extended left arrow, you will hear a small beep, and the vertical position will also be changed. In fact, the mouse will be moved to mid way between the top and bottom of the edit box.
Likewise, extended up arrow will move to the top edge of the window. Extended down arrow will move to the bottom edge of the window. And extended right arrow will move to the right edge.
When you use the extended up, down, left, and right arrows, jaws will say good, meaning that the mouse moved as intended, already good, meaning that the mouse was already in the correct position, or bad, meaning that the mouse did not move to the intended location.
If you are in object mode, the cursor is moved to the corners or the edges of the MSAA object instead. Object mode is entered and exited with alt+control+windows+shift+o.
If the jaws or invisible cursor is active when you do this, and the frame is valid, that cursor will be moved to the top left corner of the frame. To preserve the jaws or invisible cursor position, activate the PC cursor first.
There are three kinds of functions. And there are five functions of each kind, one for each channel.
The first kind is the void functions. These simply cause the associated sound to play, and increment the event counter for the corresponding channel.
The functions are named, HRHook1, HRHook2, HRHook3, HRHook4, and HRHook5. These functions are void, and require no parameters. You don't need to declare them in any way, just call them. Jaws will find them because they are part of the default set once the utilities are installed. But, don't forget to remove the hooks from the code before moving your scripts to a machine where the utilities are not installed. Otherwise, you will experience an annoying barrage of error messages, unless you condition the call upon the global variable JLSUtilitiesActive. Declare this variable as a global integer in your code. It will be set to 1 if the utilities are installed and authorized, 0 otherwise. No, setting this variable to 1 does not cause unauthorized utilities to become active. sorry. Nice try.
the Second kind, is the string functions. These five are called HRHook1s through HRHook5s.
Here, you can provide a string label, and a string value. for example,
Most conveniently, if you do not feel like providing a label, because you are lazy, or you are pretty sure you will know what the value represents, you can simply omit the second parameter, , such as:
the third kind are the integer functions. they are named HRHook1i through HRHook5i, and are used like this:
There is a Clear All Values link in the Event Monitoring dialog which lets you make these labels and values disappear if you want.
the sounds activated by these functions do not depend on the sounds enable hot key, alt+control+windows+backSlash. They are individually enabled and disabled through the Event Monitoring dialog as described below
When you press the shift+alt+control+windows+w hot key, you are presented with a dialog where you can enable and disable each of the various channels. Each channel's counter is also displayed, so you can see how many times that event has fired since it was last enabled. The event counter is cleared when that channel is enabled.
To the right of the event counter on each channel line, is a value field, which will not appear if no value has been recorded for that channel since the last clearAllValues command. However, if one of the hook functions for this channel has been called, and a value was recorded, data will appear here. If a label was provided, this field will be of the form
Cursor up and down this dialog, and press enter on a channel to change it's state. When you enable the channel, you will hear the sound which will be played when that event fires. These files are the various tone.wav files located in the JLS_Audio folder, under the settings\enu folder. So, you can easily replace them with sounds of your own.
Tones used are:
The counts and values displayed are captured at the time the dialog opens, and also when any channel is toggled on or off. However, they are not normally updated in real time. This is because manipulating the virtual buffer can actually cause some event functions to fire unexpectedly. It was, therefore, considered best to keep this dialog static unless a key was pressed requiring some change in it's contents.
However, if you really want the counters and values to stay up to date as your hooks are called, you can do so by editing the [EventMonitoring] section of the jls_utilities.JSI file. The value called UpdateRate is the refresh interval in tenths of a second. A value less than 5 is forced to 0 to prevent JAWS from being overloaded. A value of 0 means no periodic refresh will occur. If you set this value to something greater than 5, the counters and values will update periodically. Note that this is not synchronous with the calling of the hook functions. They are kept as simple as possible so as to have as little impact on the real-time performance of your application scripts as possible.
There are two capture modes, as controlled by parameter CaptureFirst, in the Event Monitoring section of file jls_utilities.JSI. If this parameter is set to 1, then all hooks will only capture a value if no value associated with that channel has been captured since the last ClearAllValues command. So, you'll get the first value recorded, and subsequent values will be ignored. If this parameter is set to 0, then each value recorded will overwrite the previous value. And, what you see in the dialog, will be the most recent value.
In general, it is best to uncheck the option in the default configuration, under user options, which causes the virtual viewer to appear on screen. This allows you to operate the event monitoring dialog without causing changes in the application. You can have it appear on screen if you like, but, I recommend not doing so, unless truly necessary. This is especially true when configuring the dialog for automatic update.
Actually, the usefulness of this function depends on the creativity with which you apply it. Arguably, the best reason to implement it was just to play with the virtual viewer to see what kind of custom interface could be implemented. But, at least, you can install these hooks in your various event functions, and conveniently turn them on and off at will. You don't have to remove them, just to make them stop bugging you for a while. And, you can see how many times they are getting called.
There is a pannick key, in case you get overwhelmed with beeping tones, and can't figure out what is going on. Just press alt+control+windows+escape to turn all channels off. Don't forget that key. Enjoy the silence.
One great application for this, for example, is to go to the FocusChanged event in your application script file, and add a call to HRHook1(). Then, recompile your script file and switch to the application. Open the event monitoring dialog, and enable channel 1. Then, press escape to close the dialog, placing focus back in the application. Now, you will hear a beep each time the FocusChanged Event fires, and the counter will be incremented. You can always open the dialog at any time to check on the counter value.
After editing the JLS_utilities.JSI file, it is best to close and restart jaws, to assure that all values get read.
the philosophy to use, is that, while all attributes are potentially useful, some of them are more commonly used, and are especially handy for simply identifying the pattern of the hierarchy as you browse it. Make your favorite attribute item be item 0 in the rotation. Cluster your other favorites in the low numbers, such as 1 and 2, with the rest of your favorites in the high numbers, just below the max number. This would place those you would be least likely to use, on the opposite side of the rotation circle, arount item 6. In this way, when you are on item 0, where the beep occurs, you will be closest to your most often used attributes.
Because lots of MSAA objects are sparcely filled out, it is often nice to have JLS monitoring multiple items as you arrow around.
To add the current item to the list of items to be automatically spoken, press shift+alt+control+windows+NumPad plus. This will toggle the current item inm, or out, of the autoAnnounce list. Double click this key to clear the list.
When the AutoAnnounce list is not empty, using the plus and minus keys to go through the list of attributes, will cause an audible click to play when the currently selected item is in the autoAnnounce list.
To familiarize yourself with the sounds made when object navigating, Press shift+alt+control+windows+h. Down arrow to a condition and press enter to hear the sound that gets played when that condition is encountered.
First, if you don't already have it,
Download The Installer.
and run it. This will copy the necessary files, and recompile them for your version of jaws.
To install these scripts, it is necessary to add keys to your default.jkm file, and to add statements to your default.jss and recompile the default script file.
In recent versions of jaws, you need to make sure there is a file in your user-specific settings\enu folder called default.jkm. Normally, this file resides only in the shared settings area. If you already have default.jkm in the user-specific settings\enu folder, then make a copy of that file before you install this utility. That will provide the best means of easily uninstalling these utilities if desired. If default.jkm exists only in the shared settings area, then copy that file to the user-specific settings area.
Use a text editor to open one of the files that contains the JLS key assignments. Choose from:
If you find that your alt+shift+arrow keys, which move the mouse and speak color,
don't work any differently than they always did, then,
in Default.jkm, you should manually remove the existing assignments for shift+alt+up down left and right arrows. These are assigned to function HRMouseUp, down left and right. respectively in the jls keys.txt file by default, and your additions should replace the existing default assignments.
This is usually not necessary.
You can remove a key assignment by placing a semicolon ";" at the left end of the line.
Remember to go to the default configuration file, and enable the keyboard option to differentiate between numPad and extended keys. In some cases with other applications, that may affect which cursor keys you must use in order to interact properly with the application.
But, it is necessary to enable certain JLS features, such as speaking chunks, and learning
mouse positioning information inside a window.
Next, you must open default.jss with the scrip manager, and add the following statements. Make sure you do these exactly as shown. You can compile correctly, while still having mistyped these lines, and the results are very annoying until you get it corrected:
The hot key help is tied to alt+control+windows+h.
Alt+control+windows+q will report the current version of the utilities.
JLS utilities has hot keys which let you enable or disable debug mode, and to discard the history, or to open the history in the virtual viewer.
More of the functions provided in the script manager scripts are documented in the ScriptManager.zip file.
In case you want to get access to the utility handle in your own scripts, reference global variable HRGrip. It is declared as a handle, and will point to the current utility window.
This can be useful if you want the JLS utility handle to be set to some handle being determined by your script.
To determine if the utilities are installed, reference integer variable JLSUtilitiesActive. This will be 1 if the utilities are installed, 0 otherwise.
To change how the event monitoring captures data values, you can change global integer HRCaptureFirst. this is initialized from the jls_utilities.JSI file at jaws startup, but can be changed at any time thereafter. Set to 0 to capture continuously, or 1 to capture only the first value after a ClearAllValues.
To do this, send file JLS_enumerate.zip to the client. Instructions for installing and using the utility are inside the .zip file, in file jls_enumerate.txt.
When you receive the file, place in the settings\enu folder. In jaws 6, it must be in the settings\enu\PersonalizedSettings folder.
Then, Press control+alt+shift+windows+e. the JLS_utilities will prompt you for a file name. Type in the file name and press enter. You are now ready to navigate the data file.
While in remote mode, the following jaws functions will be overridden, for all applications. This means that you will not wish to remain in remote mode indefinitely, as other scripts in your system will not function properly while remote mode is active, because they will be obtaining data from the data file, rather than from your operating system..
The following JAWS builtin functions will now be accessing the remote data file, rather than acquiring information from your operating system. this will apply to all scripts in all applications, since the JLS_utilities are linked into the default scripts.
this substantial override allows you to test many of your script functions against the data in the remote file from the client's machine, rather than your own system.
However, when in remote mode, not all functions are available. You can not get chunks, nor perform any functions related to the jaws cursor, such as routing or color detection. There is no distinction between highlight and normal text. However, you can read the text inside each window. The f12 report concerning window visibility, does not report the window boundaries.
To return to normal windows navigation on your own machine, press control+alt+shift+windows+e again, and type in a single space as the file name, followed by the enter key. Or, you can simply restart jaws, which is not a bad idea anyway, since heavy use of the INI functions tends to cause jaws to become unstable..
To limit debug messages to call chains that include a particular function, press enter on that function name in the virtual viewer. Or, to allow debug messages for all call chains, place the cursor on a ***Tag line, and press enter.
To Toggle between having file names shown or not, there is a link at the bottom of the viewer to do that.
Press escape to close the viewer.
To clear the call stack record, press shift+jls mods + s.
Naturally, we would love to hear from you. Send e-mail to:
TheSnowman@SnowManRadio.com.
HRHook1s (StringValue, "My label")
where the two string values will accept up to 32 characters of data.
These functions, one per channel, will record a label and a string value which will be shown in the Event Monitoring dialog. This allows you to track variable values as your code executes.
HRHook1s (StringValue)
and the "label = " portion of the string will not appear in the resulting line in the monitor dialog.
HRHook1i (integerValue, "my string label")
Again, you can omit the label string if you do not wish to provide one.
Label = Value
Or, if no label was provided, this field will be of the form:
Value
Hexidecimal Arithmetic Functions
Ever wanted a translator between decimal and hexidecimal number formats? Now, you have one. Press alt+control+windows+shift+4 on the numbers row to convert a hexidecimal string to decimal format. alt+Control+windows+shift+8 converts a decimal integer to hex format. In both cases, make the first character a dash if you want it interpretted as a signed negative number. Hex numbers should begin with a number. for example 0f, rather than just f for the value 15 decimal.
The JLS_Utilities.JSI File
File JLS_Utilities.JSI in the settings\enu folder contains custom information used to control behavior of the utilities. There are four sections in this file:
Customizing The Attribute Rotation
As you use the NumPad plus and minus keys to rotate among the list of window attributes to be spoken, you may find that you prefer a different order than is provided. fortunately, you can do this. To do so, Use Notepad or other pure text editor to modify file jls_utilities.jsi. You can change the numbers to indicate the order in which the items should appear. but, you don't need to sort the lines into order. The small beep sounder will always occur at item 0. do not modify the Max item unless you want to eliminate some of the existing items. Max represents the index at which the rotation will return to 0.
MSAA Object Mode
This mode is mutually exclusive with window mode, and is used to navigate the tree of active accessibility (MSAA) objects. You can freely move back and forth between these modes.
To enter or exit this mode, use shift+alt+control+windows+o.
To initialize to the object currently at the active cursor, press alt+control+windows+enter. Use the alt+control+windows arrow keys, just as you do with window mode, using left or right to move among peer objects, up arrow to go to the parent object, and down arrow to go to the first child object.
Use numPad plus and minus to choose what gets spoken, and numpad 5 to repeat it.
Some objects also contain a list of what are referred to as simple elements. To move through the list of simple elements, use numPad 1 and 3 keys, which is the end and page down keys. To go back to the first simple element, press shift+alt+control+windows+NumPad1.
To place focus on the current object, press the alt+control+windows+numPad 9 key.
Selecting Object Attributes To Be Spoken
Use the numPad plus and minus keys to choose what gets spoken as you move around.
Or, you can use the alt+shift+control plus a numbers row key to directly access the attribute of choice. Double click taht key to make that attribute the default.
To force the autoAnnounce list back to tracking the single selected item, as in previous versions, press shift+alt+control+windows+NumPad minus. This will toggle between using the custom list, and using the single selected item.
This also works in Window mode.
Learning The Sound Effects
If you have sounds turned on, with the backslash key, JLS will play special sounds when you are navigating objects. These sounds indicate information about the current object, in the context of its surroundings. The sounds played depend on the direction of navigation. for example, when navigating vertically, sounds are played to indicate whether each new object has peer-level objects, either to left or right or both, and whether that object has simple elements. This will alert you as to whether you should bother arrowing in those directions to explore the details. Likewise, when navigating horizontally, sounds indicate whether the current object has child objects, and whether it also has simple elements associated with it.
Installation
Copy the entire contents to the clipboard. then, open the user-specific version of default.jkm in paste the clipboard at the top of the corresponding section of the jkm file. the section names are enclosed in left bracket and right btracket [], and correspond to your keyboard layout.
Then, recompile the default scripts. Your utility scripts are now installed. It's definitely a good idea to restart jaws, to get it to read the default key map.
UnInstall
To uninstall:
JLS_utilities is now removed. You can delete the jls_*.* files from your user-specific settings if you like.
However, the total space occupied is only a few hundred kBytes. Why bother? You'll probanbly change your mind.
Use "jls_utilities.jsb"
If you followed the installation recommendation to put the jls keys at the top of the section for your keyboard layout, You can select from the start of that section down to a line that says:
;jls end
And delete that selection. Or, you can simply restore your old version of default.jkm.Free Scripts Included
This section lists extra script files included with this distrubution.
Debugging your scripts
The script manager scripts provide a set of hot keys which will allow you to insert a special line into your script code to speak the value of a particular variable, of string or integer format. Press the hot key, f7 or f8, and type the name of the variable.
If debugging is enabled when you script executes one of the lines of variable capture logic, it will add the name and value of the variable to the debug history, which can then be viewed from JLS utilities.
The variable capture lines are denoted with @@@ signs in comments, so you can easily find and remove them later.
Global Variables
The following global variables are declared by the utilities. You can also declare these in your own code, and reference them for temporary use. They are initialized to 0 by jaws. Even if the utilities do not exist on a machine on which your scritpsa are running, the global will still exist, by virtue of your declaration, but will remain at 0. Dont change these, just reference them.
Remote Analysis
This feature allows you to send a small utility to a client, for installation on that machine. The utility, called jls_enumerate, will capture a data file which can be sent back to you, containing information about the structure of windows on their machine. You can then force the JLS_Utilities to access that data file, rather than the windows on your own system. So, as you use the navigation keys, you are actually navigating through the data file, and seeing information as it existed on the client's machine at the time the data was captured.
JLS_debug
This was alluded to earlier when discussing the script manager scripts.
This module lets you insert a debug statement at a point where you want to check on a variable value, or to make sure a piece of code is getting called.
In the script manager, go to the place where you want to make the check.
Press f7 for strings, or f8 for integers, and type in the name of the variable of that type which you want to have recorded.
JLS will insert the code required to record the value.
Go to the application, and press jls mods f9 to toggle debug mode on.
Operate the scripts to cause the targeted code to execute.
When the test function is encountered, the value of the selected variable will be spoken, and also added to a growing debug log.
To display the debug log, Press jls mods f10.
Escape to leave the record.
To clear the record, press jls mods + f11.
StackAnalyzer
This utility lets you add a function call to a place where you want to identify how a function got invoked.
Go to that place in the script manager, and add a call to function Installing Scritp Manager Scripts
Install the supplied scripts. Go to the all users area, and rename scriptManager.jkm and ScritpManager.jsb, substituting a dollar sign for the j in jsb.
You will have to rename those back again if you want to install a jaws update.
Explore the script manager hot key help. go to script manager, and press insert+h.
Contact Information
Thanks for using JLS utilities. Please tell your associates about the power and flexibility of these utilities, and send them to the snowman's web site:
SnowmanRadio.com