The GW-Scripting list is a discussion list for information regarding the development and use of Window-Eyes scripts. Any subscriber of the GW-Scripting list has the ability to post on-topic messages.
From:
RicksPlaceSubject:
External Script WorkAround TestDate:
Thu, Apr 7, 2011 12:03:20 pmcharset="iso-8859-1"
Hi Guys:
I tried Ron's work-around and got mixed results which were not seemingly consistent from test to test.
So I decided to do a couple of bare bones tests and document the sstructured results along with providing the simple block of code I used..
Let me know if the code looks correct according to the proposed work around.
Here is what I did and the test results of 2 tests:
I stripped everything not directly related to my problem from my VB.net Script project.
I moved the Logger Utility class into the VB.net Script's Main Module for clarity.
I verified all aspects of the vb.net script implementation as follows:
In the bin folder in theDebug SubFolder I verified the requisit DLL entries:
Scripting.dll
windoweyes.dll
I verified them in the References Folder:
Scripting
System
....
windoweyes
So they are loaded and referenced.
They appear in the VB.net Object Browser as expected.
The code for my Module:
BeginCopiedCode:
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Configuration
Imports System.IO
Public Module LaunchApp
Private MyApp As WindowEyes.Application
Private MyMSAAEventSourceWithoutEvents As WindowEyes.MSAAEventSource
Private WithEvents MyMSAAEventSource As WindowEyes.MSAAEventSource
Public WithEvents MyClientInformation As WindowEyes.ClientInformation
Public Speech As WindowEyes.Speech
Private start_time As DateTime
Private stop_time As DateTime
Private elapsed_time As TimeSpan
Public Sub Main()
start_time = Now
Try
MyApp = CreateObject("WindowEyes.Application")
Logger.WriteLine( "MyApp created ok")
Catch ex As Exception
Logger.WriteLine( "Error Creating MyApp from WindowEyes.Application: " & VbCrlf & ex.ToString())
End Try
Speech = MyApp.Speech
Try
MyApp.ClientIdentify(System.Diagnostics.Process.GetCurrentProcess().Id )
MyClientInformation = MyApp.ClientInformation
MyClientInformation.ScriptName = "RicksWEComScript"
MyClientInformation.ScriptDescription = "This is my test script for the vb.net interface"
MyClientInformation.ScriptHelp = "This is a help string in ClientInfo."
Logger.WriteLine( "ClientInformation Initialized OK")
Catch ex As Exception
Logger.WriteLine( "ProblemInitializing ClientInformation in MainSub: " & VbCrlf & ex.ToString())
End Try
Try
MyMSAAEventSourceWithoutEvents = MyApp.MSAAEventSource
' MyMSAAEventSourceWithoutEvents.Process = MyClientInformation.ApplicationProcess
MyMSAAEventSourceWithoutEvents.WatchEvent(WindowEyes.MSAAEventID.event_OBJECT_FOCUS)
MyMSAAEventSource = MyMSAAEventSourceWithoutEvents
Logger.WriteLine( "MyMSAAEventSource Initialized OK")
Catch ex As Exception
Logger.WriteLine( "Error initializing MSAAEventSource: " & VbCrlf & ex.ToString())
End Try
Application.Run(New AppContext)
End Sub
Private Sub MyMSAAEventSource_OnObjectFocus( AccObj As WindowEyes.Accessible ) _
Handles MyMSAAEventSource.OnObjectFocus
If AccObj Is Nothing Then
Logger.WriteLine( "Hit: AccObj was nothing in sub")
Speech.Speak( "Focus AccObj Is Nothing")
Else
Logger.WriteLine( "Hit: AccObj.Title: " & AccObj.Title)
Speech.Speak( "Hit: AccObj.Title: " & AccObj.Title)
End If
stop_time = Now
elapsed_time = stop_time.Subtract(start_time)
Logger.WriteLine( "ElapsedTime To Firings: " & elapsed_time.TotalSeconds.ToString("0.000000") & " Seconds")
End Sub
Private Sub clientInformation_OnShutdown() _
Handles MyClientInformation.OnShutdown
Speech.Speak( "Shutting Down Now, ByeBye")
Logger.WriteLine( "Shutting Down Now")
Application.Exit()
End Sub
Public Class AppContext
Inherits ApplicationContext
Public Sub New()
MyBase.New()
End Sub
End Class
Public Class Logger
Public Shared Sub WriteLine( ByVal Line As String )
Try
Dim LoggerPath As String = _
"C:DOCUME~1RickMYDOCU~1VISUAL~1ProjectsRtWECom1Log.txt"
File.AppendAllText( LoggerPath, Line )
File.AppendAllText( LoggerPath, vbCrLf )
Catch ex As Exception
MessageBox.Show( "Exception in logger, " & ex.ToString() )
End Try
End Sub
End Class
End Module
EndCopiedCode:
Test01:
To Test the above senario:
I UnLoaded my VBScript for Chip's class so it wouldn't interfear with my testing of my Vb.net Script.
I ReBooted to make sure everything was clean and ran a test:
I opened CSharp Express 2008, the associated Application to my VB.net script:
I cursored up and down a ListBox on the Start Page with 6 items, tabbed around a dialog with about 6 items.
I then opened the Menu Bar and cursored to and clicked on Create New Project.
The OnFocus event did not fire until the Create New Project Dialog came up.
From then on it seemed to continue to fire on focus changes.
I Then closed everything up and exited the CSharp Express Application.
Here is the log output:
BeginCopiedOutput:
MyApp created ok
ClientInformation Initialized OK
MyMSAAEventSource Initialized OK
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.328125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.343750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.375000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 55.625000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 74.218750
Shutting Down Now
EndCopiedOutput:
Test02:
I repeated the above test:
Again the OnFocus event did not fire on the Start Page no matter how I navigated around it.
I then hit alt, opened the Menu Bar:
right Cursored to the Tools Menu:
Cursored up to the Options Item and hit enter on it.
As soon as the Options Window Came up the OnFocus Event started firing again as in test01.
It continued to fire until I closed CSharp Express 2008.
Here is the copied output:
BeginCopiedOutput:
MyApp created ok
ClientInformation Initialized OK
MyMSAAEventSource Initialized OK
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 80.859375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.062500
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.062500
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.125000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 86.843750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 86.859375
Shutting Down Now
EndCopiedOutput:
OK, so the only thing I can note is that my app needed a second window, the Create New Project dialog in the first test and the Options Window in the second test, before the OnFocus event started firing.
Second, in neither case did I get an Accessible Object provided to my OnFocus handler sub indicating something is still not working.
Well, this is the end of this test session...
If you see something I am doing wrong let me know. If not, perhaps it will help you if you work on this sample.
Good luck guys and let me know if anything comes up that I might be able to help with.
Rick USA
Hi Guys:
I tried Ron's work-around and got mixed results which were not seemingly consistent from test to test.
So I decided to do a couple of bare bones tests and document the sstructured results along with providing the simple block of code I used..
Let me know if the code looks correct according to the proposed work around.
Here is what I did and the test results of 2 tests:
I stripped everything not directly related to my problem from my VB.net Script project.
I moved the Logger Utility class into the VB.net Script's Main Module for clarity.
I verified all aspects of the vb.net script implementation as follows:
In the bin folder in theDebug SubFolder I verified the requisit DLL entries:
Scripting.dll
windoweyes.dll
I verified them in the References Folder:
Scripting
System
....
windoweyes
So they are loaded and referenced.
They appear in the VB.net Object Browser as expected.
The code for my Module:
BeginCopiedCode:
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Configuration
Imports System.IO
Public Module LaunchApp
Private MyApp As WindowEyes.Application
Private MyMSAAEventSourceWithoutEvents As WindowEyes.MSAAEventSource
Private WithEvents MyMSAAEventSource As WindowEyes.MSAAEventSource
Public WithEvents MyClientInformation As WindowEyes.ClientInformation
Public Speech As WindowEyes.Speech
Private start_time As DateTime
Private stop_time As DateTime
Private elapsed_time As TimeSpan
Public Sub Main()
start_time = Now
Try
MyApp = CreateObject("WindowEyes.Application")
Logger.WriteLine( "MyApp created ok")
Catch ex As Exception
Logger.WriteLine( "Error Creating MyApp from WindowEyes.Application: " & VbCrlf & ex.ToString())
End Try
Speech = MyApp.Speech
Try
MyApp.ClientIdentify(System.Diagnostics.Process.GetCurrentProcess().Id )
MyClientInformation = MyApp.ClientInformation
MyClientInformation.ScriptName = "RicksWEComScript"
MyClientInformation.ScriptDescription = "This is my test script for the vb.net interface"
MyClientInformation.ScriptHelp = "This is a help string in ClientInfo."
Logger.WriteLine( "ClientInformation Initialized OK")
Catch ex As Exception
Logger.WriteLine( "ProblemInitializing ClientInformation in MainSub: " & VbCrlf & ex.ToString())
End Try
Try
MyMSAAEventSourceWithoutEvents = MyApp.MSAAEventSource
' MyMSAAEventSourceWithoutEvents.Process = MyClientInformation.ApplicationProcess
MyMSAAEventSourceWithoutEvents.WatchEvent(WindowEyes.MSAAEventID.event_OBJECT_FOCUS)
MyMSAAEventSource = MyMSAAEventSourceWithoutEvents
Logger.WriteLine( "MyMSAAEventSource Initialized OK")
Catch ex As Exception
Logger.WriteLine( "Error initializing MSAAEventSource: " & VbCrlf & ex.ToString())
End Try
Application.Run(New AppContext)
End Sub
Private Sub MyMSAAEventSource_OnObjectFocus( AccObj As WindowEyes.Accessible ) _
Handles MyMSAAEventSource.OnObjectFocus
If AccObj Is Nothing Then
Logger.WriteLine( "Hit: AccObj was nothing in sub")
Speech.Speak( "Focus AccObj Is Nothing")
Else
Logger.WriteLine( "Hit: AccObj.Title: " & AccObj.Title)
Speech.Speak( "Hit: AccObj.Title: " & AccObj.Title)
End If
stop_time = Now
elapsed_time = stop_time.Subtract(start_time)
Logger.WriteLine( "ElapsedTime To Firings: " & elapsed_time.TotalSeconds.ToString("0.000000") & " Seconds")
End Sub
Private Sub clientInformation_OnShutdown() _
Handles MyClientInformation.OnShutdown
Speech.Speak( "Shutting Down Now, ByeBye")
Logger.WriteLine( "Shutting Down Now")
Application.Exit()
End Sub
Public Class AppContext
Inherits ApplicationContext
Public Sub New()
MyBase.New()
End Sub
End Class
Public Class Logger
Public Shared Sub WriteLine( ByVal Line As String )
Try
Dim LoggerPath As String = _
"C:DOCUME~1RickMYDOCU~1VISUAL~1ProjectsRtWECom1Log.txt"
File.AppendAllText( LoggerPath, Line )
File.AppendAllText( LoggerPath, vbCrLf )
Catch ex As Exception
MessageBox.Show( "Exception in logger, " & ex.ToString() )
End Try
End Sub
End Class
End Module
EndCopiedCode:
Test01:
To Test the above senario:
I UnLoaded my VBScript for Chip's class so it wouldn't interfear with my testing of my Vb.net Script.
I ReBooted to make sure everything was clean and ran a test:
I opened CSharp Express 2008, the associated Application to my VB.net script:
I cursored up and down a ListBox on the Start Page with 6 items, tabbed around a dialog with about 6 items.
I then opened the Menu Bar and cursored to and clicked on Create New Project.
The OnFocus event did not fire until the Create New Project Dialog came up.
From then on it seemed to continue to fire on focus changes.
I Then closed everything up and exited the CSharp Express Application.
Here is the log output:
BeginCopiedOutput:
MyApp created ok
ClientInformation Initialized OK
MyMSAAEventSource Initialized OK
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.328125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.343750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.359375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 39.375000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 55.625000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 74.218750
Shutting Down Now
EndCopiedOutput:
Test02:
I repeated the above test:
Again the OnFocus event did not fire on the Start Page no matter how I navigated around it.
I then hit alt, opened the Menu Bar:
right Cursored to the Tools Menu:
Cursored up to the Options Item and hit enter on it.
As soon as the Options Window Came up the OnFocus Event started firing again as in test01.
It continued to fire until I closed CSharp Express 2008.
Here is the copied output:
BeginCopiedOutput:
MyApp created ok
ClientInformation Initialized OK
MyMSAAEventSource Initialized OK
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 65.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 80.859375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.062500
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.062500
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.078125
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.093750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.109375
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 85.125000
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 86.843750
Hit: AccObj was nothing in sub
ElapsedTime To Firings: 86.859375
Shutting Down Now
EndCopiedOutput:
OK, so the only thing I can note is that my app needed a second window, the Create New Project dialog in the first test and the Options Window in the second test, before the OnFocus event started firing.
Second, in neither case did I get an Accessible Object provided to my OnFocus handler sub indicating something is still not working.
Well, this is the end of this test session...
If you see something I am doing wrong let me know. If not, perhaps it will help you if you work on this sample.
Good luck guys and let me know if anything comes up that I might be able to help with.
Rick USA




