Hi Peter, This is the problem with continuing to use Window-Eyes when it is no longer being supported. In the current situation, it forces people to try to keep using Window-Eyes by tinkering with it. In order to tinker with it, you have to be an advanced user. If I run into these situations, I begin by disabling the associated app, and see if I really need it in order to use the program which the app was written for. If you're willing to do this, you can go ahead and try.
Hth, Rod Sent from Outlook for Windows -----Original Message----- From: Talk On Behalf Of peter Chin via Talk Sent: November 10, 2019 9:18 PM To: Window-Eyes Discussion List Cc: peter Chin Subject: email 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/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/archive%40mail-archive.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