Hi Guys and... OK: so I have tried many, many paths of analysis yesterday but none of them resulted in a resolution to my problem. To review where my analysis now stands let's look at how GW does it in a VBS Script: Dim blockFocusEvent : Set blockFocusEvent = Nothing Above they create a user object variable and initialize it to nothing. As I understand it this is to maintain the state of the object which might change through iterations of the subsequent logic. It also instantiates the object which may, or not, be required for other reasons. Dim myMSAAEventSource : Set myMSAAEventSource = MSAAEventSource Above they create a user variable (MyMSAAEventSource) object and initialize it to the native Windoweyes MSAAEventSource Values. Again, it is likely required for state management and, or, other reasons. myMSAAEventSource.Process = ClientInformation.ApplicationProcess Above they set the user object variable MyMSAAEventSource Process property to whatever process is in the Native Windoweyes ClientInformation.ApplicationProcess. This is for filtering on the Overlap process, CSharp in my case, if I read it correctly. Dim msaaEventObjectFocus : msaaEventObjectFocus = 0 msaaEventObjectFocus = ConnectEvent(myMSAAEventSource, "OnObjectFocus", "OnObjectFocus") Above they create and set a user integer variable to a returned value from the Connect method. This method is monitoring the myMSAAEventSource user object created from the native Windoweyes MSAAEventSource object as with the BlockEvent method. Note that the user variable also might be used to maintain the state of the object somehow throughout iterations.
Things to note: 1) In VBS they do not need nor use the ClientIdentify method. Therefore there is no grab of an external process id to put wherever the ClientIdentify method puts it for external scripts. Thus, there is no way to determine if the ClientInformation process is the same as it would be if the ClientIdentify method were used in a vBS Script for analysis. This should not be a problem as discussed below. 2) They assign the result of the ConnectEvent to a user defined variable as they do with the BlockEvent method. This can not be done with the Watch Event in VB.net since the WatchEvent is a sub. I do wonder if this could be a problem since there is the question of whether the WatchEvent would maintain it's state during iterations with no local variable as used in other methods in the VBS version. 3) They pull values directly from the ClientInformation object and not a user object variable in VBS. The use of a User Variable is required in an external script from what I can tell and should make no diference since it's value is assigned the native windoweyes ClientInformation object. Also, this maintains the state of that variable without question if I understand correctly. Just to see if assigning the process used in the ClientIdentify method could be assigned to filter the MyMSAAEventSource rather than the ClientInformation Process, I tried to assign the: System.Diagnostics.Process to the MyMSAAEventSource Process to use in Event Monitoring. I got the message that: Exception Thrown System.InvalidCastException: Unable to cast object of type 'System.Diagnostics.Process' to type 'WindowEyes.Process'. So this method of analysis is also out. That said, since the WatchEvent, the OnShutdown and the BlockEvents all use the ClientInformation version of the Process, I would think they would all work or none of them would work if the diference between the 2 process ids, the ClientIdentify process and the ClientInformation process were being problematic. The OnShutdown and the BlockEvents seem to be working correctly so I'm not sure this is relative to the problem in any event. summarySo Far: The ClientInformation process is suppose to be the Process of the Overlap Application, in our case I believe that should be the CSharp Application. Since the System CurrentProcess is diferent from the Overlap Process that would make sense since the Current Process might likely be the WindowEyes, or my external script, process and not the same as the overlap or the CSharp process. Thus it would seem that having 2 processes show up during analysis at these points in the logic flow would be correct and not likely related to the current problem of the WatchEvent method not working. Again, I can not assign a diferent process to neither the ClientInformation object nor the MyMSAAEventSource object to test and verify or negate the validity of this line of analysis; But, it makes sense that the two processes should exist and be used as they are in my code and as described above. So far the only major diference is that the VBS Connect Event method returns a variable maintained during event processing. The WatchEvent method used in a External script does not return a variable. My next path of analysis will be to restore the external script to it's original status where it worked except for the WatchEvent statement and where everything seemed to work if I opened CSharp under the IMMED window utility. Then I will attempt to monitor the existance of the WatchEvent method during testing somehow - not sure about that since it is a method, sub, and not a variable though. Also, I will try and nail down the processes for the CSharp Application in the earliest stages of the Main Module and Main sub using both the ClientInformation object and the system Process used in the ClientIdentify method. I noted that in the VB.net example GW put forth they did not use a Message Pump via the Context object which may, or not, have any bearing on this situation and my analysis of the Process used from the earliest stages of execution prior to creating the new context object withit's pump might shed some light on whether this might be problematic as well. Well... Later Guys: I'll post up again after the next batch of tests are done. My wife made me stop yesterday - she said my veins were popping out around my temples which is not a good thing for an old fat blind guy of 63! - grin. Rick USA