Hello all,
I made some mistakes in my last message so I am sending it again.
--------------------------------------------------
Hello all,
I use WLM as my e-mail client on a Windows 8.1 machine and WE
9.5.4. I
had
no trouble with this client until just over a month ago. Since
then, I
get a
script error message after sending out an e-mail message.I get four
choices:
ignore error, stop App, edit App or restart App. I have to choose
the
last
option if I want to continue using WLM. However, WLM doesn't
function
properly unless I either reload WE or get out of WLM and then go
back
in.
I hope someone can suggest a remedy for this problem. For those who
understand script writing (which I don't), I include a copy of the
script
which is supposed to be re-edited.
------------------------------------------------------------
' For license information, see WindowsLiveMail License.txt which
ships
with
this package.
Option Explicit
Dim myXMLFile : myXMLFile = ClientInformation.ScriptPath &
"\WindowsLiveMail.xml"
Dim myINIFile : myINIFile = ClientInformation.ScriptPath &
"\WindowsLiveMail.ini"
Dim myStrings : Set myStrings = Strings(myXMLFile)
Dim myScriptUpdateURL : myScriptUpdateURL =
"
http://www.gwmicro.com/scripts/windows_live_mail/xml
"
Dim checkedForUpdates : checkedForUpdates = False
Dim errorReportingEnabled : errorReportingEnabled = False
Dim SO_StandardHelpDialog : Set SO_StandardHelpDialog = Nothing
Dim SO_CheckForUpdate : Set SO_CheckForUpdate = Nothing
Dim SO_ErrorReporting : Set SO_ErrorReporting = Nothing
Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject")
Dim messageWindow : Set messageWindow = Nothing
Dim setFileActiveEvent : setFileActiveEvent = 0
Dim lastSpoken : lastSpoken = ""
Dim blockedFocusEvent : Set blockedFocusEvent = Nothing
Dim msaaFocusEvent : msaaFocusEvent = 0
Dim myMSAAEventSource : Set myMSAAEventSource = Nothing
Dim contactHwnd : contactHwnd = 0
Dim fieldDataEvent : fieldDataEvent = 0
Dim myMoveMessageHotkey : Set myMoveMessageHotkey = Nothing
Dim myKeyDownEvent : myKeyDownEvent = 0
Dim keyProcessedDownEventForBraille :
keyProcessedDownEventForBraille =
0
Dim myBrailleObj : Set myBrailleObj = Nothing
Dim firstLetterNavStr : firstLetterNavStr = ""
Dim keyPressTimer : keyPressTimer = 0
Const TIMER_AUTOCOMPLETE = 1000
Const GRAPHIC_PREFIX = "GRAPHIC_"
Class MessageWindowClass
Private toField
Private autoCompleteSelected
Private myMSAAEventSource
Private autoCompleteEntries
Private myHotkeys
Private messageWindow
Private msaaEvents
Private timers
Private startTimerProxy
Private hotkeyProxy
Private msaaEventProxy
Public Sub Class_Initialize()
' Begin
Set toField = Nothing
Set autoCompleteSelected = Nothing
Set myMSAAEventSource = MSAAEventSource
Set autoCompleteEntries =
CreateObject("Scripting.Dictionary")
Set myHotkeys = CreateObject("Scripting.Dictionary")
Set msaaEvents = CreateObject("Scripting.Dictionary")
Set timers = CreateObject("Scripting.Dictionary")
Set startTimerProxy = (New
SingleParameterProxyClass).Init(Me,
"TimerProc")
Set hotkeyProxy = (New DualParameterProxyClass).Init(Me,
"HotkeyProc")
Set msaaEventProxy = (New DualParameterProxyClass).Init(Me,
"MSAAProc")
End Sub
Public Function Init(wObj, newMessage)
' Begin
Set messageWindow = wObj
RegisterHotkeys wObj
' We only need to hook events for new messages
myMSAAEventSource.Window = messageWindow
If newMessage Then
msaaEvents(msaaEvents.Count + 1) =
ConnectEventWithParameter(myMSAAEventSource, "OnObjectFocus",
msaaEventProxy, event_OBJECT_FOCUS)
msaaEvents(msaaEvents.Count + 1) =
ConnectEventWithParameter(myMSAAEventSource, "OnObjectStateChange",
msaaEventProxy, event_OBJECT_STATECHANGE)
Else
msaaEvents(msaaEvents.Count + 1) =
ConnectEventWithParameter(myMSAAEventSource, "OnObjectReorder",
msaaEventProxy, event_OBJECT_REORDER)
End If
Set Init = Me
End Function
Private Sub RegisterHotkeys(wObj)
Dim i
' Begin
For i = 1 to 7
Set myHotkeys("myAlt" & i & "HotKey") =
Keyboard.RegisterHotkey("Alt-" & i, hotkeyProxy, wObj, i, True)
Next
End Sub
Public Sub HotkeyProc(hotkeyID, firstPress)
Dim accObj, noteWindow, searchStr, result, location,
speakStr,
match
' Begin
Set accObj = ActiveWindow.Accessible
Set noteWindow = Nothing
Set location = Nothing
Set result = Nothing
searchStr = ""
speakStr = ""
match = fmExact
If Not accObj Is Nothing Then
Set noteWindow = GetAccessibleByName(accObj.Children,
"NoteWindow", fmExact)
If Not noteWindow Is Nothing Then
Select Case hotkeyID
Case 1 ' Alt-1: From
searchStr = myStrings("MSG_FIELDS_FROM")
Case 2 ' Alt-2: Date
searchStr = myStrings("MSG_FIELDS_DATE")
Case 3 ' Alt-3: To
searchStr = myStrings("MSG_FIELDS_TO")
Case 4 ' Alt-4: CC
searchStr = myStrings("MSG_FIELDS_CC")
Case 5 ' Alt-5: BCC
searchStr = myStrings("MSG_FIELDS_BCC")
Case 6 ' Alt-6: Subject
searchStr = myStrings("MSG_FIELDS_SUBJECT")
Case 7 ' Alt-7: Attachment'
searchStr = "("
'myStrings("MSG_FIELDS_ATTACHMENT_STRING")
match = fmContains
End Select
If Len(searchStr) > 0 Then
Set result =
GetAccessibleByName(noteWindow.Children,
searchStr, match)
If Not result Is Nothing Then
If hotkeyID = 7 Then
speakStr = result.Name
ElseIf hotkeyID = 1 Then
speakStr = result.Value & " " &
result.Description
Else
speakStr = result.Value
End If
Set location = result.Location
Else
speakStr = myStrings("NO") & " "
If hotkeyID = 7 Then
speakStr = speakStr &
myStrings("MSG_FIELDS_ATTACHMENT_STRING")
Else
speakStr = speakStr & searchStr
End If
End If
End If
End If
End If
If firstPress Then
Silence
MySpeak speakStr
Else
If Not location Is Nothing Then
Mouse.Position = ScreenPoint(location.Left,
location.Top)
Mouse.Click mbLeft, 1
End If
End If
End Sub
Public Default Sub MSAAProc(accObj, eventID)
Dim accRole : Set accRole = Nothing
Dim accState : Set accState = Nothing
' Begin
If Not accObj Is Nothing Then
On Error Resume Next
Set accRole = accObj.Role
Set accState = accObj.State
On Error Goto 0
Select Case eventID
Case event_OBJECT_REORDER
If Left(accObj.Value, Len("wlmailhtml:{")) =
"wlmailhtml:{" Then
If Not accRole Is Nothing Then
If accRole.Value = role_SYSTEM_PANE Then
If Not accState Is Nothing Then
If accState.Focused And
accState.ReadOnly Then
If BrowseMode.State =
bmsActive
Then
'bmsEnabled
Sleep 100
ExecuteHotkey hkRedraw
End If
End If
End If
End If
End If
End If
Case event_OBJECT_FOCUS
If Not accRole Is Nothing Then
If accRole.Value = role_SYSTEM_TEXT Then
If accObj.Name =
myStrings("MSG_FIELDS_TO")
Then
Set toField = accObj
End If
End If
End If
Case event_OBJECT_STATECHANGE
If Not accRole Is Nothing Then
If accRole.Value = role_SYSTEM_LISTITEM Then
If Not accState Is Nothing Then
If accState.Selected Then
Set autoCompleteSelected =
accObj
If
timers.Exists(TIMER_AUTOCOMPLETE)
Then
If
timers(TIMER_AUTOCOMPLETE)
<> 0
Then
StopTimer
timers(TIMER_AUTOCOMPLETE)
End If
End If
timers(TIMER_AUTOCOMPLETE) =
StartTimer(100, startTimerProxy, TIMER_AUTOCOMPLETE)
End If
End If
End If
End If
End Select
End If
End Sub
Public Sub TimerProc(timerID)
Dim i, keys, accState, strToSpeak, index
' Begin
Select Case timerID
Case TIMER_AUTOCOMPLETE
If Not autoCompleteSelected Is Nothing Then
On Error Resume Next
strToSpeak = autoCompleteSelected.Value & ". " &
autoCompleteSelected.Description
index =
GetSelectedItemIndex(autoCompleteSelected)
strToSpeak = strToSpeak &
Replace(myStrings("SUGGESTIONS"), "%1",
Replace(Replace(myStrings("INDEX"),
"%1", index(0)), "%2", index(1)))
Silence
MySpeak strToSpeak
On Error Goto 0
End If
End Select
End Sub
Private Function GetSelectedItemIndex(accObj)
Dim accParent, i, children, total, selected, childState
' Begin
total = 0
selected = 0
Set accParent = Nothing
If Not accObj Is Nothing Then
On Error Resume Next
Set accParent = accObj.Parent
On Error Goto 0
If Not accParent Is Nothing Then
total = accParent.Children.Count
For i = 1 To accParent.Children.Count
On Error Resume Next
Set childState = accParent.Children(i).State
On Error Goto 0
If Not childState Is Nothing Then
If childState.Selected Then
selected = i
Exit For
End If
End If
Next
End If
End If
GetSelectedItemIndex = Array(selected, total)
End Function
Public Sub Dispose()
Dim i, keys
' Stop any existing timers
keys = timers.Keys
For i = 0 to UBound(keys)
If timers(keys(i)) <> 0 Then
StopTimer timers(keys(i))
End If
Next
' Unhook all the MSAA events
keys = msaaEvents.Keys
For i = 0 to UBound(keys)
If msaaEvents(keys(i)) <> 0 Then
Disconnect msaaEvents(keys(i))
End If
Next
End Sub
Private Function GetAccessibleByName(accChildren, strName,
match)
Dim accChild, result
' Begin
Set result = Nothing
For Each accChild In accChildren
Select Case match
Case fmExact
If accChild.Name = strName Then
Set result = accChild
Exit For
End If
Case fmContains
If InStr(accChild.Name, strName) > 0 Then
Set result = accChild
Exit For
End If
Case fmStartsWith
If Left(accChild.Name, Len(strName)) =
strName Then
Set result = accChild
Exit For
End If
Case fmEndsWith
If Right(accChild.Name, Len(strName)) = strName
Then
Set result = accChild
Exit For
End If
End Select
If accChild.Children.Count > 0 Then
Set result = GetAccessibleByName(accChild.Children,
strName,
match)
If Not result Is Nothing Then
Exit For
End If
End If
Next
Set GetAccessibleByName = result
End Function
Public Sub Class_Terminate()
Set messageWindow = Nothing
Set hotkeyProxy = Nothing
Set startTimerProxy = Nothing
Set autoCompleteEntries = Nothing
Set msaaEventProxy = Nothing
Set timers = Nothing
Set myHotkeys = Nothing
Set myMSAAEventSource = Nothing
Set autoCompleteSelected = Nothing
Set toField = Nothing
End Sub
End Class
' DualParameterProxyClass - marshals calls to the specified function
inside
the caller. This
' particular class deals events or procedures that take a single
argument.
Class DualParameterProxyClass
Private caller
Private functionName
' VBScript doesn't appear to report the default method correct,
' so we need to make sure that it's defined first.
Public Default Sub Main(parm1, parm2)
Eval "caller." & functionName & "(parm1, parm2)"
End Sub
Public Function Init(c, fn)
Set caller = c
functionName = fn
Set Init = Me
End Function
End Class
' SingleParameterProxyClass - marshals calls to the specified
function
inside the caller. This
' particular class deals events or procedures that take a single
argument.
Class SingleParameterProxyClass
Private caller
Private functionName
' VBScript doesn't appear to report the default method correct,
' so we need to make sure that it's defined first.
Public Default Sub Main(parm1)
Eval "caller." & functionName & "(parm1)"
End Sub
Public Function Init(c, fn)
Set caller = c
functionName = fn
Set Init = Me
End Function
End Class
'------------------------------------------------------------------------------
' OnStateChange is the routine that gets called with the
OnStateChange
event
' fires from the SharedObjects object.
'------------------------------------------------------------------------------
Sub OnStateChange(objName, objState)
If objName = "com.GWMicro.GWToolkit.CheckForUpdate" Then
If objState Then
'---------------------------------------------------------------------
' The CheckForUpdate object was just loaded, so call the
' CheckForUpdates routine if we have't already.
'---------------------------------------------------------------------
Set SO_CheckForUpdate = SharedObjects(objName,
0).NewCheck
If Not checkedForUpdates Then
Queue "CheckForUpdates"
checkedForUpdates = True
End If
Else
Set SO_CheckForUpdate = Nothing
End If
ElseIf objName = "com.GWMicro.GWToolkit.StandardHelpDialog" Then
'---------------------------------------------------------------------
' The StandardHelpDialog object was just loaded, so now
we can
' set the ClientInformation.ScriptHelp property to our real
' script help routine. Otherwise, we'll set it back to our
' default message.
'---------------------------------------------------------------------
If objState Then
Set SO_StandardHelpDialog = SharedObjects(objName,
0).NewDialog
'----------------------------------------------------------------
' Set up the help dialog with the appropriate
information
'----------------------------------------------------------------
SO_StandardHelpDialog.INIFileName = myINIFile
SO_StandardHelpDialog.HelpTitle =
ClientInformation.ScriptName &
" " & ClientInformation.ScriptVersion
SO_StandardHelpDialog.HelpText =
myStrings("Script_Help")
SO_StandardHelpDialog.ScriptName =
ClientInformation.ScriptName
SO_StandardHelpDialog.ScriptVersion =
ClientInformation.ScriptVersion
SO_StandardHelpDialog.FocusCloseButton = True
SO_StandardHelpDialog.UpdateUrl = myScriptUpdateURL
SO_StandardHelpDialog.UseAboutBox = True
SO_StandardHelpDialog.AboutAuthor = "GW Micro, Inc."
SO_StandardHelpDialog.AboutReleaseDate =
fsObj.GetFile(ClientInformation.ScriptPath & "\" &
ClientInformation.ScriptFileName).DateLastModified
SO_StandardHelpDialog.AboutCopyright = "GW Micro, Inc."
SO_StandardHelpDialog.AboutWebsite = "
www.gwmicro.com
"
If SharedObjects("com.GWMicro.GWToolkit.Version")() >=
"8.4.1"
Then
SO_StandardHelpDialog.AboutEmail = "
supp...@gwmicro.com
"
End If
'----------------------------------------------------------------
' Change ClientInformation.ScriptHelp to our real
routine
'----------------------------------------------------------------
ClientInformation.ScriptHelp = "ScriptHelp"
Else
'----------------------------------------------------------------
' Change ClientInformation.ScriptHelp to our default
message
'----------------------------------------------------------------
Set SO_StandardHelpDialog = Nothing
ClientInformation.ScriptHelp =
myStrings("GWToolkit_Required")
End If
ElseIf objName = "com.GWMicro.GWToolkit.ErrorReporting" And
objState
Then
'---------------------------------------------------------------------
' The ErrorReporting object was just loaded, so now we can
execute
' the code it provides for enhanced error reporting,
assuming
we
haven't
' already done so (with the errorReportingEnabled
variable will
tell
us).
' ErrorReporting is not stored as a global variable,
because we
only
care
' about executing it once, and never again.
'---------------------------------------------------------------------
If Not errorReportingEnabled Then
ExecuteGlobal SharedObjects(objName,
0)(ClientInformation.ScriptVersion, "
aa...@gwmicro.com
", True)
errorReportingEnabled = True
End If
End If
End Sub
'-----------------------------------------------------------------------
' Check for automatic updates
'-----------------------------------------------------------------------
Sub CheckForUpdates()
'-----------------------------------------------------------------------
' We first need to see if the check for update object is
available.
If
' it's not, there's no point in continuing.
'-----------------------------------------------------------------------
If Not SO_CheckForUpdate Is Nothing Then
'--------------------------------------------------------------------
' If Automatic_Update exists in our INI, and the value is 1,
then
' we'll attempt to check for a new version.
'--------------------------------------------------------------------
If IniFile(myINIFile).Number("Automatic_Updates",
"OnScriptStart",
1) = 1 Then
'----------------------------------------------------------------
' To check for an update, we need to provide the
required
' information: our script version (which we stored in
the
' ClientInformation object in the global variables
section,
and
' the web address to our XML file, which we also
stored in
' the global variables section.
'----------------------------------------------------------------
SO_CheckForUpdate.ScriptVersion =
ClientInformation.ScriptVersion
SO_CheckForUpdate.UpdateUrl = myScriptUpdateURL
'----------------------------------------------------------------
' Now that we've provided all the required
inforamtion, we
' have the GW Toolkit check for an update.
'----------------------------------------------------------------
SO_CheckForUpdate.Check
'----------------------------------------------------------------
' Finally, we'll set the global flag that indicates
whether
or
' not we've already checked for updates to True
'----------------------------------------------------------------
checkedForUpdates = True
Else
'----------------------------------------------------------------
' Since we weren't able to get the toolkit object at
this
point,
' we need to make sure our global flag that indicates
whether
' or not we've already checked for updates is set to
False.
'----------------------------------------------------------------
checkedForUpdates = False
End If
End If
End Sub
Sub ScriptHelp()
SO_StandardHelpDialog.Show
End Sub
Main()
Sub Main()
ClientInformation.ScriptName = myStrings("Script_Name")
ClientInformation.ScriptVersion = myStrings("Script_Version")
ClientInformation.ScriptDescription =
ClientInformation.ScriptName
& " "
& ClientInformation.ScriptVersion
ClientInformation.ScriptHelp = myStrings("GWToolkit_Required")
ConnectEvent SharedObjects, "OnStateChange", "OnStateChange"
ConnectEvent DesktopWindow, "OnChildActivate", "OnChildActivate"
ConnectEvent DesktopWindow, "OnChildCreate", "OnChildCreate"
ConnectEvent DesktopWindow, "OnChildClose", "OnChildClose"
setFileActiveEvent = ConnectEvent(Application,
"OnSetFileActivate",
"OnSetFileActivate")
End Sub
Sub OnSetFileActivate(setFile)
If setFile.FileName = "WindowsLiveMail.set" Then
LoadGraphicDictionaryEntries()
' We're done with this event, so no need to keep it hanging
around
If setFileActiveEvent <> 0 Then
Disconnect setFileActiveEvent
setFileActiveEvent = 0
End If
End If
End Sub
Sub LoadGraphicDictionaryEntries()
Dim activeSet, activeGraphicDictionary, keys, i, crc, labels
' Begin
Set activeSet = ActiveSettings
If Not activeSet Is Nothing Then
Set activeGraphicDictionary = activeSet.GraphicDictionary
If Not activeGraphicDictionary Is Nothing Then
keys = myStrings.Keys
For i = 1 to UBound(keys)
If Left(keys(i), Len(GRAPHIC_PREFIX)) =
GRAPHIC_PREFIX
Then
crc = Mid(keys(i), Len(GRAPHIC_PREFIX) + 1,
Len(keys(i)))
labels = Split(myStrings(keys(i)), "|")
On Error Resume Next
' This is in an on error because, prior to
Window-Eyes
7.5.4, sending a CRC
' value greater than 2147483647 would cause an
overflow
script error.
activeGraphicDictionary.Add crc, labels(0),
labels(1),
False, False, False
On Error Goto 0
End If
Next
End If
End If
End Sub
Sub OnChildCreate(wObj)
If wObj.ModuleName = "MSMAIL" Then
If wObj.ClassName = "Address Book Native Window Class"
Then '
Address Book Native Window Class
contactHwnd = wObj.Handle
Set myMSAAEventSource = MSAAEventSource
myMSAAEventSource.Process =
ClientInformation.ApplicationProcess
Set blockedFocusEvent =
myMSAAEventSource.BlockEvent(event_OBJECT_FOCUS,
ClientInformation.ApplicationProcess)
msaaFocusEvent = ConnectEvent(myMSAAEventSource,
"OnObjectFocus", "OnObjectFocus")
End If
End If
End Sub
Sub OnChildClose(hwnd)
If hwnd = contactHwnd Then
If msaaFocusEvent <> 0 Then
Disconnect msaaFocusEvent
msaaFocusEvent = 0
End If
If Not blockedFocusEvent Is Nothing Then
blockedFocusEvent.Unblock
Set blockedFocusEvent = Nothing
End If
If Not myMSAAEventSource Is Nothing Then
Set myMSAAEventSource = Nothing
End If
End If
End Sub
Sub OnChildActivate(wObj)
' Begin
If Not messageWindow Is Nothing Then
messageWindow.Dispose()
End If
Set messageWindow = Nothing
If fieldDataEvent <> 0 Then
Disconnect fieldDataEvent
fieldDataEvent = 0
End If
If myKeyDownEvent <> 0 Then
Disconnect myKeyDownEvent
myKeyDownEvent = 0
End If
Set myMoveMessageHotkey = Nothing
If wObj.ModuleName = "MSMAIL" Then
Select Case wObj.ClassName
Case "Outlook Express Browser Class"
' Maximize the main window
wObj.Status = wsMaximized
Set myMoveMessageHotkey =
Keyboard.RegisterHotkey(myStrings("MOVE_TO_HOTKEY"),
"TriggerMoveToDialog",
wObj, wObj)
Case "ATH_Note"
If Left(wObj.Name,
Len(myStrings("MESSAGE_WINDOW_NAME"))) =
myStrings("MESSAGE_WINDOW_NAME") Then
Set messageWindow = (New
MessageWindowClass).Init(wObj,
False)
ElseIf Left(wObj.Name,
Len(myStrings("NEW_MESSAGE_WINDOW_NAME"))) =
myStrings("NEW_MESSAGE_WINDOW_NAME") Then
Set messageWindow = (New
MessageWindowClass).Init(wObj,
True)
End If
End Select
ElseIf wObj.ModuleName = "WLMAIL" Then
Select Case wObj.Name
Case myStrings("RULE_EDITOR_WINDOW_NAME")
fieldDataEvent = ConnectEvent(wObj,
"OnChildFieldData",
"OnChildFieldData")
End Select
Select Case wObj.Title
Case myStrings("GOTO_FOLDER_WINDOW_TITLE"),
myStrings("MOVE_WINDOW_TITLE")
myKeyDownEvent = ConnectEventWithParameter(Keyboard,
"OnKeyDown", "OnKeyDown", wObj)
End Select
End If
End Sub
Function OnChildFieldData(wObj)
Dim lvObj, lvSelected, checkedState
' Begin
OnChildFieldData = vbNull
If wObj.ClassName = "SysListView32" And wObj.ModuleName =
"WLMAIL"
Then
Set lvObj = wObj.Control
If TypeName(lvObj) = "ListView" Then
On Error Resume Next
Set lvSelected = lvObj.Items.Selected(1)
On Error Goto 0
If Not lvSelected Is Nothing Then
If lvSelected.StateImage = 7 Then
checkedState = myStrings("UNCHECKED")
Else
checkedState = myStrings("CHECKED")
End If
OnChildFieldData = checkedState & ". " &
lvSelected.Text
End If
End If
End If
End Function
Sub OnObjectFocus(accObj)
Dim eventWin : Set eventWin = Nothing
Dim accRole : Set accRole = Nothing
Dim accParent : Set accParent = Nothing
Dim accParentRole : Set accParentRole = Nothing
Dim handledEvent : handledEvent = False
' Begin
On Error Resume Next
accObj.Prefetch apAll
On Error Goto 0
If Not accObj Is Nothing Then
Set eventWin = accObj.Window
If Not eventWin Is Nothing Then
Set accRole = accObj.Role
If Not accRole Is Nothing Then
Set accParent = accObj.Parent
If Not accParent Is Nothing Then
Set accParentRole = accParent.Role
If Not accParentRole Is Nothing Then
If eventWin.ClassName = "WLXDUI" And
eventWin.ModuleName = "WLMAIL" Then
If accRole.Value = role_SYSTEM_LISTITEM
Then
If accParentRole.Value =
role_SYSTEM_WINDOW
And accParent.Name = "ABFrame" Then
Dim parts : parts =
Split(accObj.Description, vbCr)
Dim contact
If Trim(accObj.Name) <>
Trim(parts(0))
Then
contact = accObj.Name &
". " &
parts(0)
Else
contact = parts(0)
End If
Queue "MySpeak", contact
handledEvent = True
End If
End If
End If
End If
End If
End If
End If
End If
If Not accObj Is Nothing Then
If Not handledEvent Then
accObj.SimulateEvent event_OBJECT_FOCUS, apAll
End If
End If
End Sub
Sub MySpeak(str)
' Begin
If str <> lastSpoken Then
Silence
Queue "MyBraille", str
Speak str
End If
lastSpoken = str
End Sub
Sub MyBraille(str)
Dim bDisplay, padding
' Begin
Set bDisplay = Nothing
If SharedObjects("com.GWMicro.GWToolkit.Version")() >=
"8.5.1" Then
If myBrailleObj is Nothing Then
Set myBrailleObj =
SharedObjects("com.GWMicro.GWToolkit.CustomBraille").NewBraille()
End If
If Not myBrailleObj is Nothing Then
myBrailleObj.Display str
ConnectKeyDown
End If
Else
On Error Resume Next
Set bDisplay = BrailleDisplays.Active
On Error Goto 0
If Not bDisplay Is Nothing Then
If bDisplay.Type <> bdtNone Then
padding = Braille.ActiveCellCount
If Len(str) < padding Then
padding = padding - Len(str)
End If
If padding > Len(str) Then
str = str & String(padding, " ")
End If
Braille.Display str
End If
End If
End If
End Sub
Sub TriggerMoveToDialog(wObj)
Dim ribbon, item
' Begin
On Error Resume Next ' Because MSAA
Set ribbon = GetRibbon()
If Not ribbon Is Nothing Then
' NOTE: This won't work if the Home tab is NOT the active
tab!
Set item = GetRibbonItem(ribbon,
myStrings("HOME_RIBBON_TAB_NAME"),
myStrings("HOME_ACTIONS_RIBBON_GROUP_NAME"),
myStrings("HOME_ACTIONS_MOVETO_ITEM_NAME"))
If Not item Is Nothing Then
item.DoDefaultAction()
If Err.Number <> 0 Then
Silence
Speak myStrings("MOVE_UNAVAILABLE")
End If
End If
End If
On Error Goto 0
End Sub
Function GetRibbon()
' Begin
Set GetRibbon = DrillDown(ActiveWindow.Accessible,
role_SYSTEM_PANE,
myStrings("LOWER_RIBBON"))
End Function
Function GetRibbonItem(ribbon, tabName, groupName, itemName)
Dim child, tabObj, groupObj, itemObj
' Begin
Set itemObj = Nothing
Set tabObj = Nothing
Set groupObj = Nothing
If Not ribbon Is Nothing Then
For Each child In ribbon.Children(1).Children
If tabObj Is Nothing Then
If child.Name = tabName Then
Set tabObj = child
Exit For
End If
End If
Next
If Not tabObj Is Nothing Then
For Each child In tabObj.Children
If groupObj Is Nothing Then
If child.Name = groupName Then
Set groupObj = child
Exit For
End If
End If
Next
End If
If Not groupObj Is Nothing Then
For Each child In groupObj.Children
If itemObj Is Nothing Then
If child.Name = itemName Then
Set itemObj = child
Exit For
End If
End If
Next
End If
End If
Set GetRibbonItem = itemObj
End Function
Function DrillDown(accObj, role, name)
Dim child, result
' Begin
On Error Resume Next
If accObj.Role.Value = role Then
If accObj.Name = name Then
Set DrillDown = accObj
Exit Function
End If
End If
For Each child In accObj.Children
If child.Role.Value = role Then
If child.Name = name Then
Set DrillDown = child
Exit Function
End If
End If
If child.Children.Count > 0 Then
Set result = DrillDown(child, role, name)
If Not result Is Nothing Then
Set DrillDown = result
Exit Function
End If
End If
Next
On Error Goto 0
Set DrillDown = Nothing
End Function
Function OnKeyDown(vk, km, wObj)
Dim kDisp
' Begin
kDisp = kdProcess
If keyPressTimer <> 0 Then
StopTimer keyPressTimer
keyPressTimer = 0
End If
If FocusedWindow.ModuleName = "WLMAIL" And
FocusedWindow.ClassName
=
"WLXDUI" Then
' Start keeping track of key presses. When the timer fires,
then
look
' for the string entered.
km = km And Not kmShift And Not kmNumpad And Not kmNumlock
If (vk = 32 Or (vk >= 48 And vk <= 126)) And km = 0 Then
firstLetterNavStr = firstLetterNavStr & ChrW(vk)
keyPressTimer = StartTimer(250, "FirstLetterNav",
firstLetterNavStr)
kDisp = kdDiscard
Else
firstLetterNavStr = ""
keyPressTimer = 0
End If
Else
firstLetterNavStr = ""
keyPressTimer = 0
End If
OnKeyDown = kDisp
End Function
Sub ConnectKeyDown
If keyProcessedDownEventForBraille = 0 Then
keyProcessedDownEventForBraille = ConnectEvent(Keyboard,
"OnKeyProcessedDown", "OnKeyProcessedDown")
End If
End Sub
Sub DisconnectKeyDown
If keyProcessedDownEventForBraille <> 0 Then
Disconnect keyProcessedDownEventForBraille
keyProcessedDownEventForBraille = 0
End If
End Sub
Sub OnKeyProcessedDown(vk, km)
If Not myBrailleObj Is Nothing Then
myBrailleObj.ReleaseDisplay
DisconnectKeyDown
End If
End Sub
Sub FirstLetterNav(navStr)
Dim focusAccObj, folderlist, folderInfo, nextFolderListID,
nextIndex,
currIndex, currFolderListID, selectedFolder, found
' Begin
found = False
If myKeyDownEvent <> 0 Then
Disconnect myKeyDownEvent
myKeyDownEvent = 0
End If
If keyPressTimer <> 0 Then
StopTimer keyPressTimer
keyPressTimer = 0
End If
Set focusAccObj = FocusedWindow.Accessible
Do
' Get the current hash of visible folder names and index
of the
selected item
Set folderList = DrillDown(focusAccObj, role_SYSTEM_OUTLINE,
myStrings("FOLDER_TREE_LIST_PANE"))
If Not folderList Is Nothing Then
folderInfo =
GetSelectedFolderInfo(folderList.Children.FilterByRoleAndState(role_SYSTEM_OUTLINEITEM))
If IsArray(folderInfo) And UBound(folderInfo) > 0 Then
currfolderListID = folderInfo(0)
currIndex = folderInfo(1)
End If
End If
' Then send a down arrow. use Down and Up because
InsertKey is
synchronous, and too slow
Keyboard.InsertKeyDown vk_DOWN
Keyboard.InsertKeyUp vk_DOWN
' Get the new hash of visible folder names and index of the
selected
item
Set folderList = DrillDown(focusAccObj, role_SYSTEM_OUTLINE,
myStrings("FOLDER_TREE_LIST_PANE"))
If Not folderList Is Nothing Then
folderInfo =
GetSelectedFolderInfo(folderList.Children.FilterByRoleAndState(role_SYSTEM_OUTLINEITEM))
If IsArray(folderInfo) And UBound(folderInfo) Then
nextFolderListID = folderInfo(0)
nextIndex = folderInfo(1)
End If
End If
' See if we have a match
If IsArray(folderInfo) And UBound(folderInfo) > 1 Then
If Left(LCase(folderInfo(2)), Len(navStr)) =
LCase(navStr)
Then
' Found a match!
found = True
Exit Do
End If
End If
Loop While currFolderListID & currIndex <> nextFolderListID &
nextIndex
If Not found Then
Keyboard.InsertKey vk_HOME, kmControl
Silence
Speak myStrings("NO_MATCH")
End If
myKeyDownEvent = ConnectEventWithParameter(Keyboard,
"OnKeyDown",
"OnKeyDown", ActiveWindow)
firstLetterNavStr = ""
End Sub
Function GetSelectedFolderInfo(folderList)
Dim result, index, folder, folderName, folderState
' Begin
index = 1
result = Array("", index, "")
Set folderState = Nothing
If Not folderList is Nothing Then
For Each folder In folderList
If Not folder is Nothing Then
folderName = folder.Name
result(0) = result(0) & Replace(folderName, " ", "")
On Error Resume Next
Set folderState = folder.State
On Error Goto 0
If Not folderState Is Nothing Then
If folderState.Selected Then
result(1) = index
result(2) = folderName
End If
End If
End If
index = index + 1
Next
End If
GetSelectedFolderInfo = result
End Function
'' SIG '' Begin signature block
'' SIG '' MIIZwAYJKoZIhvcNAQcCoIIZsTCCGa0CAQExCzAJBgUr
'' SIG '' DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
'' SIG '' gjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIBAAIB
'' SIG '' AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFMOtHpDd0pTH
'' SIG '' tywr8b101OTiYaeioIIUIzCCBBQwggL8oAMCAQICCwQA
'' SIG '' AAAAAS9O4VLXMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNV
'' SIG '' BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNh
'' SIG '' MRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9i
'' SIG '' YWxTaWduIFJvb3QgQ0EwHhcNMTEwNDEzMTAwMDAwWhcN
'' SIG '' MjgwMTI4MTIwMDAwWjBSMQswCQYDVQQGEwJCRTEZMBcG
'' SIG '' A1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYGA1UEAxMf
'' SIG '' R2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBHMjCC
'' SIG '' ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJTv
'' SIG '' Zfi1V5+gUw00BusJH7dHGGrL8Fvk/yelNNH3iRq/nrHN
'' SIG '' EkFuZtSBoIWLZFpGL5mgjXex4rxc3SLXamfQu+jKdN6L
'' SIG '' Tw2wUuWQW+tHDvHnn5wLkGU+F5YwRXJtOaEXNsq5oIwb
'' SIG '' TwgZ9oExrWEWpGLmtECew/z7lfb7tS6VgZjg78Xr2AJZ
'' SIG '' eHf3quNSa1CRKcX8982TZdJgYSLyBvsy3RZR+g79ijDw
'' SIG '' Fwmnu/MErquQ52zfeqn078RiJ19vmW04dKoRi9rfxxRM
'' SIG '' 6YWy7MJ9SiaP51a6puDPklOAdPQD7GiyYLyEIACDG6Hu
'' SIG '' tHQFwSmOYtBHsfrwU8wY+S47+XB+tCUCAwEAAaOB5TCB
'' SIG '' 4jAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
'' SIG '' /wIBADAdBgNVHQ4EFgQURtg+/9zjvv+D5vSFm7DdatYU
'' SIG '' qcEwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUH
'' SIG '' AgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3Jl
'' SIG '' cG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6
'' SIG '' Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwHwYD
'' SIG '' VR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJ
'' SIG '' KoZIhvcNAQEFBQADggEBAE5eVpAeRrTZSTHzuxc5KBvC
'' SIG '' Ft39QdwJBQSbb7KimtaZLkCZAFW16j+lIHbThjTUF8xV
'' SIG '' OseC7u+ourzYBp8VUN/NFntSOgLXGRr9r/B4XOBLxRjf
'' SIG '' OiQe2qy4qVgEAgcw27ASXv4xvvAESPTwcPg6XlaDzz37
'' SIG '' Dbz0xe2XnbnU26UnhOM4m4unNYZEIKQ7baRqC6GD/Sjr
'' SIG '' 2u8o9syIXfsKOwCr4CHr4i81bA+ONEWX66L3mTM1fsua
'' SIG '' irtFTec/n8LZivplsm7HfmX/6JLhLDGi97AnNkiPJm87
'' SIG '' 7k12H3nD5X+WNbwtDswBsI5//1GAgKeS1LNERmSMh08W
'' SIG '' YwcxS2Ow3/MwggSfMIIDh6ADAgECAhIRIQaggdM/2Hrl
'' SIG '' gkzBa1IJTgMwDQYJKoZIhvcNAQEFBQAwUjELMAkGA1UE
'' SIG '' BhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex
'' SIG '' KDAmBgNVBAMTH0dsb2JhbFNpZ24gVGltZXN0YW1waW5n
'' SIG '' IENBIC0gRzIwHhcNMTUwMjAzMDAwMDAwWhcNMjYwMzAz
'' SIG '' MDAwMDAwWjBgMQswCQYDVQQGEwJTRzEfMB0GA1UEChMW
'' SIG '' R01PIEdsb2JhbFNpZ24gUHRlIEx0ZDEwMC4GA1UEAxMn
'' SIG '' R2xvYmFsU2lnbiBUU0EgZm9yIE1TIEF1dGhlbnRpY29k
'' SIG '' ZSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
'' SIG '' CgKCAQEAsBeuotO2BDBWHlgPse1VpNZUy9j2czrsXV6r
'' SIG '' Jf02pfqEw2FAxUa1WVI7QqIuXxNiEKlb5nPWkiWxfSPj
'' SIG '' BrOHOg5D8NcAiVOiETFSKG5dQHI88gl3p0mSl9RskKB2
'' SIG '' p/243LOd8gdgLE9YmABr0xVU4Prd/4AsXximmP/Uq+yh
'' SIG '' RVmyLm9iXeDZGayLV5yoJivZF6UQ0kcIGnAsM4t/aIAq
'' SIG '' taFda92NAgIpA6p8N7u7KU49U5OzpvqP0liTFUy5LauA
'' SIG '' o6Ml+6/3CGSwekQPXBDXX2E3qk5r09JTJZ2Cc/os+XKw
'' SIG '' qRk5KlD6qdA8OsroW+/1X1H0+QrZlzXeaoXmIwRCrwID
'' SIG '' AQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgeAMEwGA1Ud
'' SIG '' IARFMEMwQQYJKwYBBAGgMgEeMDQwMgYIKwYBBQUHAgEW
'' SIG '' Jmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9z
'' SIG '' aXRvcnkvMAkGA1UdEwQCMAAwFgYDVR0lAQH/BAwwCgYI
'' SIG '' KwYBBQUHAwgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
'' SIG '' L2NybC5nbG9iYWxzaWduLmNvbS9ncy9nc3RpbWVzdGFt
'' SIG '' cGluZ2cyLmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
'' SIG '' BQUHMAKGOGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j
'' SIG '' b20vY2FjZXJ0L2dzdGltZXN0YW1waW5nZzIuY3J0MB0G
'' SIG '' A1UdDgQWBBTUooRKOFoYf7pPMFC9ndV6h9YJ9zAfBgNV
'' SIG '' HSMEGDAWgBRG2D7/3OO+/4Pm9IWbsN1q1hSpwTANBgkq
'' SIG '' hkiG9w0BAQUFAAOCAQEAgDLcB40coJydPCroPSGLWaFN
'' SIG '' fsxEzgO+fqq8xOZ7c7tL8YjakE51Nyg4Y7nXKw9UqVbO
'' SIG '' dzmXMHPNm9nZBUUcjaS4A11P2RwumODpiObs1wV+Vip7
'' SIG '' 9xZbo62PlyUShBuyXGNKCtLvEFRHgoQ1aSicDOQfFBYk
'' SIG '' +nXcdHJuTsrjakOvz302SNG96QaRLC+myHH9z73YnSGY
'' SIG '' /K/b3iKMr6fzd++d3KNwS0Qa8HiFHvKljDm13IgcN+2t
'' SIG '' FPUHCya9vm0CXrG4sFhshToN9v9aJwzF3lPnVDxWTMlO
'' SIG '' TDD28lz7GozCgr6tWZH2G01Ve89bAdz9etNvI1wyR5sB
'' SIG '' 88FRFEaKmzCCBVYwggQ+oAMCAQICEEA59jCxrMC4Ucmz
'' SIG '' YXAhHYwwDQYJKoZIhvcNAQEFBQAwgbQxCzAJBgNVBAYT
'' SIG '' AlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G
'' SIG '' A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkG
'' SIG '' A1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3
'' SIG '' LnZlcmlzaWduLmNvbS9ycGEgKGMpMTAxLjAsBgNVBAMT
'' SIG '' JVZlcmlTaWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIw
'' SIG '' MTAgQ0EwHhcNMTUwMzI3MDAwMDAwWhcNMTYwMzI2MjM1
'' SIG '' OTU5WjCBhzELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB1Zl
'' SIG '' cm1vbnQxGjAYBgNVBAcTEU1hbmNoZXN0ZXIgQ2VudGVy
'' SIG '' MSQwIgYDVQQKFBtBbGdvcml0aG1pYyBJbXBsZW1lbnRh
'' SIG '' dGlvbnMxJDAiBgNVBAMUG0FsZ29yaXRobWljIEltcGxl
'' SIG '' bWVudGF0aW9uczCCASIwDQYJKoZIhvcNAQEBBQADggEP
'' SIG '' ADCCAQoCggEBANUpyZy7NBZmLl3P+1wLci8YFyJ3eAdK
'' SIG '' pomRza9BHZWN0HpukPbGQLqRWNZYMqgRsXWRwLSdFTdW
'' SIG '' YuQx0XG1yZpmxP8xN6plK7pe0LuCKg3DSoPhOxUPuyF+
'' SIG '' 0re+bdLkUZdseLZSM9q+TbI3XTMtv4dYGXW1EyrZ5H7j
'' SIG '' 9SzMM6BcjjsdWqg6ewpSNim/0Y5z2kBfsd4KF9w8sBVW
'' SIG '' wIhyo+jUgARnFN3DHBNpjt9Cypn9p6x/ECcNlQrESe3H
'' SIG '' GprUffrvHX680360yzF5+qiQ2/peyvfhpdNclh8vnB1/
'' SIG '' Is2arACrbhwy/GabI7rbeB87qnP9QqJXAMpWbKK79y3N
'' SIG '' dvcCAwEAAaOCAY0wggGJMAkGA1UdEwQCMAAwDgYDVR0P
'' SIG '' AQH/BAQDAgeAMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6
'' SIG '' Ly9zZi5zeW1jYi5jb20vc2YuY3JsMGYGA1UdIARfMF0w
'' SIG '' WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0
'' SIG '' cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIw
'' SIG '' GQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwEwYDVR0l
'' SIG '' BAwwCgYIKwYBBQUHAwMwVwYIKwYBBQUHAQEESzBJMB8G
'' SIG '' CCsGAQUFBzABhhNodHRwOi8vc2Yuc3ltY2QuY29tMCYG
'' SIG '' CCsGAQUFBzAChhpodHRwOi8vc2Yuc3ltY2IuY29tL3Nm
'' SIG '' LmNydDAfBgNVHSMEGDAWgBTPmanqeyb0S8mOj9fwBSbv
'' SIG '' 49KnnTAdBgNVHQ4EFgQUchQRcYoquAN+2ATKzxpTAuW/
'' SIG '' GkQwEQYJYIZIAYb4QgEBBAQDAgQQMBYGCisGAQQBgjcC
'' SIG '' ARsECDAGAQEAAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCa
'' SIG '' +lsppq/uH5TvbHZAY71rRxHA5DvZX4nQVOwjRkIJmtuM
'' SIG '' Vxy4MOBBA9iKmb9i/oQeNAtW7tBb7A3eYP9uxmIW77Hw
'' SIG '' ftq30AGSZyMEZo7F2yuW+V/r8w5H8ZGbzsN+S3snssZT
'' SIG '' 4LKOpbGuBsq6ZFKUz65h+RfAJwaTquyznVjliehFuqfd
'' SIG '' OhFCyh9l7MpeWPXaGgke7MAUAzO16PjCa4oDwlHsDfB/
'' SIG '' qhV9AEDcptlvnjrgGCVMlX8SoUbHY2AfJnSESTMs/mRT
'' SIG '' QSJ1nggwCnw+P7Ww9c0AOGSsMzp53o6jh8rLLU5lGGFL
'' SIG '' pVF2orIIbmAGjLQvKreu0p6z0d5n6MpWMIIGCjCCBPKg
'' SIG '' AwIBAgIQUgDlqiVW/BqG7ZbJ1EszxzANBgkqhkiG9w0B
'' SIG '' AQUFADCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZl
'' SIG '' cmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
'' SIG '' cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBW
'' SIG '' ZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
'' SIG '' ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAz
'' SIG '' IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
'' SIG '' aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAw
'' SIG '' MjA3MjM1OTU5WjCBtDELMAkGA1UEBhMCVVMxFzAVBgNV
'' SIG '' BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
'' SIG '' U2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJt
'' SIG '' cyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24u
'' SIG '' Y29tL3JwYSAoYykxMDEuMCwGA1UEAxMlVmVyaVNpZ24g
'' SIG '' Q2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAxMCBDQTCCASIw
'' SIG '' DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPUjS16l
'' SIG '' 14q7MunUV/fv5Mcmfq0ZmP6onX2U9jZrENd1gTB/BGh/
'' SIG '' yyt1Hs0dCIzfaZSnN6Oce4DgmeHuN01fzjsU7obU0PUn
'' SIG '' NbwlCzinjGOdF6MIpauw+81qYoJM1SHaG9nx44Q7iipP
'' SIG '' hVuQAU/Jp3YQfycDfL6ufn3B3fkFvBtInGnnwKQ8PEEA
'' SIG '' Pt+W5cXklHHWVQHHACZKQDy1oSapDKdtgI6QJXvPvz8c
'' SIG '' 6y+W+uWHd8a1VrJ6O1QwUxvfYjT/HtH0WpMoheVMF05+
'' SIG '' W/2kk5l/383vpHXv7xX2R+f4GXLYLjQaprSnTH69u08M
'' SIG '' PVfxMNamNo7WgHbXGS6lzX40LYkCAwEAAaOCAf4wggH6
'' SIG '' MBIGA1UdEwEB/wQIMAYBAf8CAQAwcAYDVR0gBGkwZzBl
'' SIG '' BgtghkgBhvhFAQcXAzBWMCgGCCsGAQUFBwIBFhxodHRw
'' SIG '' czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMCoGCCsGAQUF
'' SIG '' BwICMB4aHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9y
'' SIG '' cGEwDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEw
'' SIG '' X6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4D
'' SIG '' AhoEFI/l0xqGrI2Oa8PPgGrUSBgsexkuMCUWI2h0dHA6
'' SIG '' Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMDQG
'' SIG '' A1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNp
'' SIG '' Z24uY29tL3BjYTMtZzUuY3JsMDQGCCsGAQUFBwEBBCgw
'' SIG '' JjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNp
'' SIG '' Z24uY29tMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF
'' SIG '' BQcDAzAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVmVy
'' SIG '' aVNpZ25NUEtJLTItODAdBgNVHQ4EFgQUz5mp6nsm9EvJ
'' SIG '' jo/X8AUm7+PSp50wHwYDVR0jBBgwFoAUf9Nlp8Ld7Lvw
'' SIG '' MAnzQzn6Aq8zMTMwDQYJKoZIhvcNAQEFBQADggEBAFYi
'' SIG '' 5jSkxGHLSLkBrVaoZA/ZjJHEu8wM5a16oCJ/30c4Si1s
'' SIG '' 0X9xGnzscKmx8E/kDwxT+hVe/nSYSSSFgSYckRRHsExj
'' SIG '' jLuhNNTGRegNhSZzA9CpjGRt3HGS5kUFYBVZUTn8WBRr
'' SIG '' /tSk7XlrCAxBcuc3IgYJviPpP0SaHulhncyxkFz8PdKN
'' SIG '' rEI9ZTbUtD1AKI+bEM8jJsxLIMuQH12MTDTKPNjlN9Zv
'' SIG '' pSC9NOsm2a4N58Wa96G0IZEzb4boWLslfHQOWP51G2M/
'' SIG '' zjF8m48blp7FU3aEW5ytkfqs7ZO6XcghU8KCU2OvEg1Q
'' SIG '' hxEbPVRSloosnD2SGgiaBS7Hk6VIkdMxggUJMIIFBQIB
'' SIG '' ATCByTCBtDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZl
'' SIG '' cmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
'' SIG '' cnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1
'' SIG '' c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3Jw
'' SIG '' YSAoYykxMDEuMCwGA1UEAxMlVmVyaVNpZ24gQ2xhc3Mg
'' SIG '' MyBDb2RlIFNpZ25pbmcgMjAxMCBDQQIQQDn2MLGswLhR
'' SIG '' ybNhcCEdjDAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIB
'' SIG '' DDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
'' SIG '' HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJ
'' SIG '' KoZIhvcNAQkEMRYEFCBVTuUSJD0Zl8eaiIuwnoCMSRs4
'' SIG '' MA0GCSqGSIb3DQEBAQUABIIBAFMkHoOHu+zPBRjU/ACP
'' SIG '' 1nmbe53IZmDNMzlq4En+o0QH5BGavsBaaA5bCJEE7xG6
'' SIG '' Am0iMUHN7P52iy6tlaZ335RSLSQlxy9ShjeK1Nrm7IV7
'' SIG '' R3GNbwGMINfq627h7pW6V5mo6Jg95d9XDNx9pW9Tpmmo
'' SIG '' 5kLVxcaIKC3K6JwG0cYGeOxOg1GwEBL0/SqcMMFx3m4C
'' SIG '' B3iMQJrVEYlsGmwjqYJRtgL/MACXR3UWYW5PYYZpqr4x
'' SIG '' dBEeV+ioIRWDiOSvdo1asLs8bK+hPyWslvVrQdrvMxRq
'' SIG '' t4/N54QR07cRZ7pmBjtjc9lCyIEA7MrOoo9v84wGM6Vj
'' SIG '' VWR8R3/eyaTngjGhggKiMIICngYJKoZIhvcNAQkGMYIC
'' SIG '' jzCCAosCAQEwaDBSMQswCQYDVQQGEwJCRTEZMBcGA1UE
'' SIG '' ChMQR2xvYmFsU2lnbiBudi1zYTEoMCYGA1UEAxMfR2xv
'' SIG '' YmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBHMgISESEG
'' SIG '' oIHTP9h65YJMwWtSCU4DMAkGBSsOAwIaBQCggf0wGAYJ
'' SIG '' KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
'' SIG '' CQUxDxcNMTYwMTI4MTYyMDUzWjAjBgkqhkiG9w0BCQQx
'' SIG '' FgQUi4S2g2cg9GBy+nyT3L8ejs+k4fcwgZ0GCyqGSIb3
'' SIG '' DQEJEAIMMYGNMIGKMIGHMIGEBBSzYwi01M3tT8+9ZrlV
'' SIG '' +uO/sSwp5jBsMFakVDBSMQswCQYDVQQGEwJCRTEZMBcG
'' SIG '' A1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYGA1UEAxMf
'' SIG '' R2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBHMgIS
'' SIG '' ESEGoIHTP9h65YJMwWtSCU4DMA0GCSqGSIb3DQEBAQUA
'' SIG '' BIIBACCR8iH1eglTwPY+rljLnDN4OyeBKu35t6nWsH9d
'' SIG '' 7jdY03nwX5g3D4ELmj36CbIBSFpTLyTIIHsB7sDta1zO
'' SIG '' SAgLPsQT1yt5A7hQw3lnil+lTrd4OdANtBSQtbH44vUW
'' SIG '' iZrVivTAvZV+XSpyHEkp3rDnSWS2oc+3QgPy4o1p5/tH
'' SIG '' CnWZp1r85qjk6Q2pDyEiOE+ue9TdGk5qltyHUtQUMcfI
'' SIG '' +P5kneBERq4NZZborwJ5u6bQ2g7QhB7wRpTMyclpTBHG
'' SIG '' g3D6qfg18xc/hXd2+gsHfLBBWOgPnJYkKyt7yrP0ru33
'' SIG '' zt72aJAWo+qXdQCwqBnzg6yz5O7dMKA89I48m0w=
'' SIG '' End signature block
---------------------------------------------------
Thanks in advance.
-----Original Message-----
From: Pamela Dominguez via Talk
Sent: Sunday, November 10, 2019 12:33 AM
To: Window-Eyes Discussion List
Cc: Pamela Dominguez
Subject: Re: email
Really? I can still use window eyes with windows live mail, and I
haven't
noticed a difference. So I don't know what you mean about window
eyes
stopped tracking the cursor. Pam.
-----Original Message-----
From: Rod Hutton via Talk
Sent: Saturday, November 09, 2019 8:17 AM
To: Window-Eyes Discussion List
Cc: Rod Hutton
Subject: RE: email
Hi Darrell,
Thunderbird worked great for me until Window-Eyes stopped
tracking the
cursor.
This was the second email client which did this to me.
The previous one was Windows Live Mail.
Since I switched to Office 365 Outlook, this has not happened.
I know that Office 365 costs money on an ongoing basis, but
Microsoft
regularly improves its accessibility, and so staying with it
gives you
the
best opportunity to use accessible email software on Windows and the
Apple
Mac.
I know, I say this all the time. Smile
With respect,
Rod
Sent from Outlook for Windows
-----Original Message-----
From: Talk <
talk-bounces+rod_hutton=hotmail....@lists.window-eyes.com
On
Behalf Of Darrell Bowles via Talk
Sent: November 7, 2019 8:48 PM
To: Window-Eyes Discussion List <
talk@lists.window-eyes.com
Cc: Darrell Bowles <
dgbow...@msn.com
Subject: RE: email
How about thunderbird?
-----Original Message-----
From: Talk <
talk-bounces+dgbowles=msn....@lists.window-eyes.com
On Behalf
Of tony c via Talk
Sent: Thursday, November 7, 2019 8:13 PM
To: Window-Eyes Discussion List <
talk@lists.window-eyes.com
Cc: tony c <
tch...@mediacombb.net
Subject: RE: email
I know outlook is accessible, but I don’t need office 365. I use
very
little
of anything except Microsoft word on a rare occasion. I just hate
the
mail
program that’s with win 10. I do use it but it’s not totally
accessible.
Sent from Mail for Windows 10
From: joseph hudson via Talk
Sent: Thursday, November 7, 2019 2:49 PM
To: Window-Eyes Discussion List
Cc: joseph hudson
Subject: Re: email
Hi Tony, Outlook is very accessible.
joseph hudson
Technology support for the blind or better known as Mack, IOS and
Windows
support
FaceTime, iMessage, and email
jhud7...@twc.com
Telephone/what's up messenger
254-300-7667
Emergency cell
254-813-2461
Twitter
https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftwitter.com%2Fjosephhudson89&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=jsjRGciWdVuDVRH5GINvRpgeuZ5NM%2FPTPoOhbUtys2I%3D&reserved=0
Facebook
https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.facebook.com%2Fjoseph.hudson.9404&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=TE8%2Fenq1ezhWNwKx62BDgNVxRZS2GWbdXLKSII5yjIQ%3D&reserved=0
On Nov 7, 2019, at 1:26 PM, tony c via Talk <
talk@lists.window-eyes.com
wrote:
Hi, I need a accessible email program. I’m using the one that on
windows
10, it is useable but just barely. Lol Tony
Sent from Mail for Windows 10
_______________________________________________
Any views or opinions presented in this email are solely those
of the
author and do not necessarily represent those of Ai Squared.
For membership options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Foptions.cgi%2Ftalk-window-eyes.com%2Fjhud7789%2540twc.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=9bjIZ689aihYWPqqvcnFmyM9xmjh4slVEoxboYiP9l0%3D&reserved=0
.
For subscription options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Flistinfo.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=W0Im4gfNzqKxokPur1%2Bi8S4KCrie5pS%2FGUWkeKrlbCY%3D&reserved=0
List archives can be found at
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Fprivate.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=dlNeDOctdjTtEzjqJvmGIfalKfWKK%2FF6Ow%2FdGqML2hc%3D&reserved=0
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author
and do not necessarily represent those of Ai Squared.
For membership options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Foptions.cgi%2Ftalk-window-eyes.com%2Ftch828%2540mediacombb.net&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=0LhtRp8fslCR0vRFkpbWbo6%2F9uc0Qm8HKKv%2FIke%2FVvA%3D&reserved=0
.
For subscription options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Flistinfo.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=W0Im4gfNzqKxokPur1%2Bi8S4KCrie5pS%2FGUWkeKrlbCY%3D&reserved=0
List archives can be found at
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Fprivate.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679719753&sdata=dlNeDOctdjTtEzjqJvmGIfalKfWKK%2FF6Ow%2FdGqML2hc%3D&reserved=0
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author
and do not necessarily represent those of Ai Squared.
For membership options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Foptions.cgi%2Ftalk-window-eyes.com%2Fdgbowles%2540msn.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679729758&sdata=9B6HvLE%2Fa%2BPKJXT3kl1rPyzsDgP0D1%2BMTrhNHMcoWgo%3D&reserved=0
.
For subscription options, visit
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Flistinfo.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679729758&sdata=kTzxo%2B7QLkTekkgvd7S6Qwvd6IwnKL3EftPFFD79tW0%3D&reserved=0
List archives can be found at
https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.window-eyes.com%2Fprivate.cgi%2Ftalk-window-eyes.com&data=02%7C01%7C%7Cc244c73ce10444eaf5f708d763e8c44e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637087723679729758&sdata=0UCfjeZuxNAyWL0x7RavHnbKGRVM%2BTCjrwOkmlnmMps%3D&reserved=0
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author
and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/talk-window-eyes.com/rod_hutton%40hotmail.com
.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/talk-window-eyes.com
List archives can be found at
http://lists.window-eyes.com/private.cgi/talk-window-eyes.com
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author
and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/talk-window-eyes.com/pammygirl99%40gmail.com
.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/talk-window-eyes.com
List archives can be found at
http://lists.window-eyes.com/private.cgi/talk-window-eyes.com
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author
and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/talk-window-eyes.com/peter.chinpk%40gmail.com
.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/talk-window-eyes.com
List archives can be found at
_______________________________________________
Any views or opinions presented in this email are solely those of
the
author and do not necessarily represent those of Ai Squared.
For membership options, visit
http://lists.window-eyes.com/options.cgi/talk-window-eyes.com/trailerdavid%40hotmail.com.
For subscription options, visit
http://lists.window-eyes.com/listinfo.cgi/talk-window-eyes.com
List archives can be found at
http://lists.window-eyes.com/private.cgi/talk-window-eyes.com