Hi Doug,
Yes, the OnChildActivate catches my window, so thanks for the information. Just 
one question about setting the OnChildActivate to the DeskTopWindow, Isn't this 
all so CPU intensive. as the last time I checked there were 452 windows 
reported in the count. The below snippet from Immed reported a count of 452.

Begin VBScript
Set d = DeskTopWindow.Children
Print D.Count
452

Warm regards.
Martin Webster.


--- On Wed, 2/1/12, Doug Geoffray <geoff...@gwmicro.com> wrote:

> From: Doug Geoffray <geoff...@gwmicro.com>
> Subject: Re: differences in window count when using startTimer
> To: gw-scripting@gwmicro.com
> Date: Wednesday, February 1, 2012, 6:03 PM
> Martin,
> 
> The window you pass into ConnectEvent tells window-Eyes you
> want only 
> children of that window that get activation to fire the
> event.  You just 
> got whatever window was active at the moment and used
> it.  Very likely 
> there is no child window of that window that ever gets
> activation.
> 
> You should do the following:
> 
> Dim OnChildWindowEvent
> OnChildWindowEvent = ConnectEvent(DesktopWindow,
> "onChildActivate", 
> "OnChildActivate")
> Function OnChildActivate(WinObj)
> Speak "child window activated"
> End Function
> 
> This passes in the DesktopWindow which is the top most
> window.  All 
> windows are children of the desktop so you'll get them all
> now.
> 
> Doug
> 
> 
> On 2/1/2012 12:53 PM, martin webster wrote:
> > Hi Doug,
> > Thanks for your reply, but how do I use the
> OnChildActivate event. Blow I have written a global routine
> which should hook the activate window of any ap running and
> tell me if a child window gains activation, but it doesn't
> seem to work. What have I got wrong.
> >
> > Begin VBScript:
> >
> > Dim OnChildWindowEvent, WinObj
> > Set WinObj = ActiveWindow
> > OnChildWindowEvent = ConnectEvent(WinObj,
> "onChildActivate", "OnChildActivate")
> > Function OnChildActivate(WinObj)
> > Speak "child window activated"
> > End Function
> >
> > Warm regards.
> > Martin Webster.
> >
> >
> > --- On Tue, 1/31/12, Doug Geoffray<geoff...@gwmicro.com> 
> wrote:
> >
> >> From: Doug Geoffray<geoff...@gwmicro.com>
> >> Subject: Re: differences in window count when using
> startTimer
> >> To: gw-scripting@gwmicro.com
> >> Date: Tuesday, January 31, 2012, 2:41 PM
> >> Martin,
> >>
> >> I would say that both methods are working as
> designed. 
> >> In your first case you have a dedicated thread that
> looks at
> >> the active window every 200 milliseconds.  In
> the
> >> second case you have setup a callback to occur
> every 200
> >> milliseconds.  So you might ask isn't that the
> same
> >> <smile>?  Well, in theory maybe so but
> not in
> >> practice.  Again, in the first case you have
> not given
> >> up control of your thread.  It just waits 200
> ms and
> >> goes on.  In the second case, you have given
> up control
> >> of your thread and setup a timer callback. 
> Timers have
> >> a very low priority.  The only thing with a
> timer that
> >> you are guaranteed is that it will not fire before
> your
> >> timeout value.  But because it is low on the
> totem pole
> >> (so to speak) it lets things with higher priority
> execute
> >> first and when there is nothing better, than it
> will fire
> >> your callback.  So one time it may be 230 ms
> than maybe
> >> 400 ms and so on.
> >>
> >> I'm not totally sure I see what you are trying to
> do but I
> >> would argue that neither approach is good. 
> You
> >> shouldn't be polling over and over for what the
> active
> >> window is.  For one thing, you could easily
> miss a
> >> window that got activation and it just eats
> unneeded cpu
> >> from your system.  What you should do is use
> the
> >> OnChildActive callback.  If you set this up
> whenever
> >> the active window changes, Window-Eyes will call
> your
> >> function for you.  This means you don't have
> to sit in
> >> some loop checking and you are guaranteed you'll
> see every
> >> active window when and only when it changes.
> >>
> >> Doug
> >>
> >> On 1/31/2012 5:09 AM, martin webster wrote:
> >>> Hi all,
> >>> I use the following vbscript routine to make
> windo-eyes
> >> wait until the correct window is active, before
> setting an
> >> object reference to my window of choice. I wrote
> the first
> >> routine rapidly using do until loop and sleep
> commands and
> >> this never fails. However, thinking that using the
> >> StartTimer object would be a much better aproach I
> rewrote
> >> the routine to use this object, and now instead of
> 30
> >> children in the active window I now have three, or
> sometimes
> >> 4. I have to write such a routine as if this
> software is not
> >> registered you get a trial days counter window and
> options
> >> to purchase the software. this is not the same
> window as I
> >> am wanting to script for. I am scripting for
> baygenie pro
> >> auction sniping software.
> >>> Now follows the first routine and the one that
> works:
> >>>
> >>> Begin VBScript
> >>>
> >>> Function ChecWindow()
> >>> Dim CheckWinObj
> >>> Set CheckWinObj = ActiveWindow
> >>> Do Until(Left(CheckWinObj.Title, 32)) =
> "BayGenie eBay
> >> Auction Sniper Pro"
> >>> Sleep 200
> >>> Set CheckWinObj = ActiveWindow
> >>> Loop
> >>> Set CheckWinObj = Nothing
> >>> ActiveWindow.Redraw
> >>> Sleep 200
> >>> Speak "loop ended"
> >>> End Function
> >>>
> >>> Out put:
> >>>
> >>> children count 30
> >>> 1 tooltips_class32
> >>> 2 IME
> >>> 3 ReBarWindow32
> >>> 4 AfxMDIFrame70u
> >>> 5 msctls_statusbar32
> >>> 6 MSCTFIME UI
> >>> 7 ToolbarWindow32
> >>> 8 #32770
> >>> 9 AfxMDIFrame70u
> >>> 10 AfxFrameOrView70u
> >>> 11 Button
> >>> 12 Static
> >>> 13 Static
> >>> 14 SysTreeView32
> >>> 15 #32770
> >>> 16 ReBarWindow32
> >>> 17 AfxFrameOrView70u
> >>> 18 MFCGridCtrl
> >>> 19 ToolbarWindow32
> >>> 20 #32770
> >>> 21 Shell Embedding
> >>> 22 Button
> >>> 23 Edit
> >>> 24 Button
> >>> 25 ComboBox
> >>> 26 Button
> >>> 27 Static
> >>> 28 Static
> >>> 29 Shell DocObject View
> >>> 30 Internet Explorer_Server
> >>> This is correct.
> >>> Now for the second routine written with the
> StartTimer
> >> object.
> >>> Begin VBScript
> >>>
> >>> Function ChecWindow()
> >>> Dim CheckWinObj
> >>> Set CheckWinObj = ActiveWindow
> >>> If(Left(CheckWinObj.Title, 32)) = "BayGenie
> eBay
> >> Auction Sniper Pro" Then
> >>> Speak "timer ended"
> >>> Set CheckWinObj = Nothing
> >>> ActiveWindow.Redraw
> >>> Sleep 200
> >>> Else
> >>> StartTimer 200, "ChecWindow"
> >>> end If
> >>> End Function
> >>>
> >>> Output
> >>> children 4
> >>> 1 Static
> >>> 2 Shell Embedding
> >>> 3 Shell DocObject View
> >>> 4 Internet Explorer_Server
> >>>
> >>> I don't understand.
> >>> Warm regards.
> >>> Martin Webster.
> >>>
> >>
> 
>

Reply via email to