Hi!
there are many different things to do. First go to the help menu and
look at the App Development and click on the App Reference.
From there go down to controls and expand that view. Once there you will
find 3 items, Properties, Methods and types.
You want to go to types and look at list boxes. There you will get the
properties and methods for a list box.
Now as Steven has mentioned, inside the WE Event monitoring you can get
names and such of what you may need, but those things are in the control
section under list boxes.
At least you have many different things to choose from and one is the
selected method. It returns you the index of the list item you are on. Also,
Data usually does this as well, and it tells you which item on the list you
are on.
using the index, getting the index, you can then get the location, and
all sorts of needed stuff to get you placed on the right one to read.
so, go down to the MSAA Events inside the app reference and monitor the
correct events listed in the MSAA section of the App Reference to capture
the List box item you want. List boxes are at least a lot easier to get
stuff from the Tree Views...
The best of the MSAA events to use is the onobjectfocus but make your
own choice.
Bruce
Bruce
Sent: Monday, July 25, 2011 4:06 PM
Subject: Re: Need help!
Mike,
A good place to start for the types of events you need to watch for is
the WEEvent app. This will let you hook nearly all events which
Window-Eyes can monitor, and produce a very detailed log of which events
fired, their values, etc. See the Script object's ConnectEvent method
description in the Window-Eyes app developer reference for an example of
how to create an event handler.
Regards,
Steve
On 7/25/2011 3:46 PM, Mike Wigle wrote:
> Hi everyone,
>
> I'm very new to coding and have found myself needing to make a very
> inaccessible application accessible in a short period of time. I've done a
> fair amount of window reclassification and that has helped in some areas.
> However, I am finding myself in need of being able to do some far more
> complex manipulation. For example, right now I have several list boxes
> that Window-Eyes does not read properly when arrowing down. I can read the
> text with the mouse cursor but even when I route the mouse to the PC
> cursor it does not route to the correct item in the list that is
> highlighted. Instead, it just goes to the top. I was wondering if anyone
> has suggestions on how I might approach coding to have WE watch for the
> change in background color of the individual list items and have the mouse
> cursor route there and read the line. Or, if you have better suggestions.
> Right now I'm in a time crunch to make this work for my client. It just
> needs to talk more efficiently than it is now. I have
her doing some horrendous processes to make these list boxes usable.
Basically, I think I'm needing to find some example code of listening for
events of specific window objects. Any thoughts or ideas would be greatly
appreciated. Thanks.
>
> Michael Wigle
> Access Technology Specialist
> Cincinnati Association for the Blind and Visually Impaired
> 2045 Gilbert Ave.
> Cincinnati, OH 45202
> Office: 513-487-4243
> Web: http://www.cincyblind.org
>
> Disclaimer: The information contained in this electronic mail message may
> be confidential and protected information intended only for the use of the
> individual or entity named above. As the recipient of this information
> you may be prohibited by State and Federal law from disclosing this
> information to any other party without specific written authorization from
> the individual to whom it pertains. If you have received this
> communication in error, please notify us immediately and destroy the
> message and its attachments.
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> Sent: Monday, July 25, 2011 12:01 AM
> To: [email protected]
> Subject: Digest list:
>
> Daily messages from mailing list :
>
> 1. draft of scripting class examples for today's class ["Chip
> Orange"<[email protected]>] 2. guest speaker for scripting class on
> August 7 ["Chip Orange"<[email protected]>]
>
> Messages:
>
> ----------------------------
> Message 1
> ----------------------------
>
> From: "Chip Orange"<[email protected]>
> To:<[email protected]>
> Reply-To: [email protected]
> Subject: draft of scripting class examples for today's class
>
> ' Draft Scripting class 21 (7/24/2011)
>
> ' these examples cover the use, and creation of, shared objects
>
> ' example 1
> ' example showing the use of a sharedObject from the GW toolkit which is
> not an object, but just a function
>
> ' This example returns a string containing the text "edit box"
>
> dim objWindowType
>
> set objWindowType = SharedObjects.get("com.GWMicro.GWToolkit.WindowType")
> ' above, sharedObjects is a root level object which only has 3 methods:
> get, register, and revoke
>
> ' the variable objWindowType, although it looks like we assigned it an
> object, actually holds only a reference to a function
>
> msgBox "The name for window type 12 is "& objWindowType(12)
>
> ' "get" is the default method of the sharedObjects object, and so you can
> actually leave it off altogether as in the line below set objWindowType =
> SharedObjects("com.GWMicro.GWToolkit.WindowType")
>
> ' if you're using the "get" method of the sharedObjects object, below is a
> much better form to use in your app
>
> ' "get" has an optional second parameter, which is the number of
> milliseconds it is to wait for the object you want to become available; '
> since use of "get" will pause your app while waiting, it's best to
> specify the wait time, so you can continue and let the user know a needed
> shared object is not available
>
> set objWindowType = nothing
> set objWindowType = SharedObjects.get("com.GWMicro.GWToolkit.WindowType",
> 10*1000) ' waits up to 10 seconds (the default is 30) if objWindowType is
> nothing then
> msgBox "Could not get a needed shared object"
>
> else
> ' here you go on to do whatever your app does knowing it got the shared
> object it needs end if
>
> ' end of example 1
>
>
> ' example 2
> ' here's the recommended way to get a shared object, by making use of the
> event which tells you when each shared object is available.
> ' It also demonstrates use of the executeGlobal command.
>
>
> Dim errorReportingEnabled
> errorReportingEnabled = False
>
> ' now connect to the onStateChange event of the sharedObjects object
> (which is a root level property).
> ConnectEvent SharedObjects, "OnStateChange", "HandleStateChange"
>
> ' end of main body
>
> Function HandleStateChange(objName, objState) ' event handler for the
> onStateChange event of the sharedObjects object.
> ' the first parameter is the name of the object, and the second is true if
> it's available, and false if not.
>
> ' this event gets triggered for each shared object when your app starts,
> as well as when new ones come online or go offline.
>
> HandleStateChange = False
>
> Select Case objName
> ' you only list CASE options for the objects you are interested in using '
> even though you will receive a notification for all possible objects.
>
> Case "com.GWMicro.GWToolkit.ErrorReporting"
> If objState Then
> ' object is available
> ' (here you put the commands specific to use of this object when it is
> loaded)
> If Not errorReportingEnabled Then
> set objErrorReporting = SharedObjects(objName, 0) ' this too
> returns a simple function and not an object
> strErrCommands = objErrorReporting(ClientInformation.ScriptVersion,
> "[email protected]", True) ' which returns a string of VBScript
> commands ' the VBScript commands for error reporting primarily make use of
> the Script object's onError event
> ExecuteGlobal strErrCommands
> ' the executeGlobal command takes a string of VBScript commands, and
> treats them as if they were part of your app from the start; it inserts
> them into your app
> errorReportingEnabled = True
> End If
> else
> ' object has become unavailable (maybe it's script has crashed) ' so maybe
> you do something in your script such as undefine a hotkey which used this
> object, gray out some menu choices, whatever.
> end if
>
> end select
>
> HandleStateChange = True ' indicates you have handled this notification
>
> end function
>
> ' end of example 2
>
>
>
> ' example 3:
> ' shows 3 different ways how to register your own object or function as a
> shared object
>
> ' 1: below is how the GW toolkit handles it's windowType shared object '
> register a function in your app as a shared object
> SharedObjects.Register "com.GWMicro.GWToolkit.WindowType",
> GetRef("WindowType")
>
> Function WindowType(typeNum)
>
> ' ...
> end function
>
>
> ' 2: below is how the Homer library handles it's homer shared object '
> register an object which is owned/created by the registering app ' and
> truly this single object is shared by all apps.
> ' (this is ok because there are no private variables in the class which
> need to be taylored to each app)
>
> SharedObjects.Register "org.NonvisualDevelopment.Homer", New Homer
>
> Class Homer
> ' Public methods
>
> ' Miscellaneous
> Public Function Append(sText)
> ' Append a line of XML to a wescriptui definition
>
> ' If InStr(sText, "<") Or InStr(sText,">") Or InStr(sText,"&") Or
> InStr(sText, ";") Or InStr(sText, Chr(34)) Then Exit Function If
> InStr(sText,"&") Or InStr(sText, ";") Or InStr(sText, Chr(34)) Then Exit
> Function sDialogXml = sDialogXml& sText& vbCrLf End Function
>
> ' ...
>
> end class
>
>
>
>
> ' 3: below is how the GW toolkit handles it's standardHelpDialog shared
> object ' register an object, which contains a method for creating a "new"
> object which the calling app must use to create the object it needs '
> before it can be used. Calling the method to create the new object gives
> each calling app it's own copy of the object.
> ' (note: the two objects here are not of the same type.)
> SharedObjects.Register
> "com.GWMicro.GWToolkit.StandardHelpDialog", New StandardHelpDialog '
> notice the second parameter above is "new standardHelpDialog", which
> creates an object of type "standardHelpDialog" which is what is registered
> as the shared object, ' but there is only one of this object.
> ' when each user calls the newStandardHelpDialog method, they'll create
> their own object to work with.
>
> Class standardHelpDialog
> Public Function NewStandardHelpDialog() ' when the calling app calls
> this method, a new object with it's properties and methods etc. will get
> created in the thread of the calling app, not the registering app
>
> Set NewStandardHelpDialog = New standardHelpDialogClass
> End Function
> End Class
>
> ' below is the class the user really works with, after creating a new
> object of this type in their app by calling the .NewStandardHelpDialog
> method of the ' shared object.
> Class standardHelpDialogClass
> Public INIFileName
> Public INISectionName
> Public INIKeyName
> Public Hotkey
> Public HelpTitle
> Public HelpText
> Public KeyStrings
> Public ScriptName
> Public ScriptVersion
> Public UpdateUrl
> Public DefaultHotkeys
> Public FocusCloseButton
> Public UseAboutBox
> Public AboutAuthor
> Public AboutVersion
> Public AboutReleaseDate
> Public AboutCopyright
> Public AboutWebsite
> Public ShowHotkeysInHelp
> Public UseHotkeyManager
> Public ParentWindow
>
> ' ...
>
> End Class
>
> ' end of example 3
>
>
>
>
> ' archives of these classes can be found at:
> ' https://www.gwmicro.com/App_Central/Developers/Interactive_Classes/
>
> ----------------------------
> Message 2
> ----------------------------
>
> From: "Chip Orange"<[email protected]>
> To:<[email protected]>
> Reply-To: [email protected]
> Subject: guest speaker for scripting class on August 7
>
> Hi all,
>
> Jeff Bishop will be the guest speaker on August 7's scripting class (two
> weeks from today). He'll speak regarding all that he did to develop the
> WinAmp app. You'll be able to get a completely different point of view
> for once!
>
> We meet live on Sunday evenings at 7 pm EDT using TeamTalk. We have a
> TeamTalk file which specifies the TeamTalk server, channel name, and
> password; if anyone would like this file so you can join us live and ask
> Jeff questions, drop me a note at the email address below:
>
> [email protected]
>
> Otherwise, you'll be able to listen to the podcast from the GW scripting
> class archives at:
>
> https://www.gwmicro.com/App_Central/Developers/Interactive_Classes/
>
> Chip
>
>
>
>
--
Stephen Clower
Product support specialist
GW Micro, Inc. * 725 Airport North Office Park, Fort Wayne, IN 46825
260-489-3671 * gwmicro.com