Suppose oWindow is a Window object for the window to be clicked.  The
Windows API technique might be as follows:

Const BM_CLICK = 245

oWindow.SendMessage BM_CLICK, 0

Jamal

On Tue, 14
Oct 2008, Marlon Brandão de Sousa wrote:

> Date: Tue, 14 Oct 2008 18:27:38 -0300
> From: Marlon Brandão de Sousa <[EMAIL PROTECTED]>
> Reply-To: [email protected]
> To: [email protected]
> Subject: Re: Automating the mouse
>
> Well .. I just can't figure out why one would spend lots of resources
> cauculating a center of a screen of a window, moving the mouse pointer
> there and clicking it if one just could get the handle of the desired
> window and sending to it a windows message. It seen more reliable and
> pretty more optimized...
> I however am not writting this to shoot anyone ... I am writting this
> to ask if I am right in the above statement, cinse I am not used to
> script window eyes.
> Thanks,
> Marlon
>
> 2008/10/13, Ron Parker <[EMAIL PROTECTED]>:
> >
> > You should almost never need the handle of a window if you're working
> > solely with VBScript.  There's almost certainly a better way to do what
> > you're doing.
> >
> > It sounds like you're somehow finding a Control object, then getting
> > Control.Window.Handle, and then trying to find the Window with that
> > handle?  That'll just get you a reference to the same object you got
> > from Control.Window; it seems like a rather roundabout way to get back
> > to where you started from.
> >
> > Besides, if you have a Control object, you can use Control.Position,
> > Control.Width, and Control.Height to get the point at the center.  So,
> > if you have a Control object in the "mycontrol" variable, this should work:
> >
> > Set sp = mycontrol.Position.ScreenPoint
> > sp.X = sp.X + mycontrol.Width / 2
> > sp.Y = sp.Y + mycontrol.Height / 2
> >
> > Mouse.Position = sp
> >
> >
> >
> > Tim Burgess wrote:
> >> Aaron,
> >>
> >> My concern about the filter approach is that it doesn't seem very
> >> specific.
> >> Given the parameters you describe, the chances of the filter returning
> >> more
> >> than one hit seems substantial - this is why I use control ID values a
> >> lot,
> >> when I know I'm dealing with a well-behaved application anyway.
> >>
> >> Having said all that, you've given me the solution I need by inference.
> >> If
> >> I grab the handle of my desired window based on its control ID (I've got
> >> that routine working well now), I can then use that handle to find the
> >> rectangle coordinates as per your suggestion - thanks.
> >>
> >> I might also try the messaging approach suggested by Marlon ad see if
> >> either
> >> method has any significant benefits/drawbacks.
> >>
> >> Best wishes.
> >>
> >> Tim Burgess
> >> Raised Bar Ltd
> >> Phone:  +44 (0)1827 719822
> >>
> >> Don't forget to vote for improved access to music and music technology at
> >>
> >> http://www.raisedbar.net/petition.htm
> >>
> >> -----Original Message-----
> >> From: Aaron Smith [mailto:[EMAIL PROTECTED]
> >> Sent: 11 October 2008 18:58
> >> To: [email protected]
> >> Subject: Re: Automating the mouse
> >>
> >> The Windows object has several Filter methods that let you find a specific
> >> window. If you know the window's class name and module name, you can use
> >> the
> >> FilterByClassAndModule. If you don't know the class name, you can use
> >> FilterByName or FilterByTitle (although Title is going to be a little
> >> slower
> >> than the others).
> >>
> >> Once you have a window, you can get its rectangle, and the move the mouse
> >> to
> >> the top left corner. Alternatively, you can calculate the middle of the
> >> window's rectangle, and move the mouse there. Then do your mouse click.
> >>
> >> Assuming that you do in fact know the class name and the module name, and
> >> the window you're looking for is a child of the active window, I would do
> >> the following:
> >>
> >> Dim myFilteredWins : Set myFilteredWins =
> >> ActiveWindow.FilterByClassAndModule(myClass, myModule)
> >>
> >> If myFilteredWins.Count = 1 Then
> >>    ' Found one match
> >>    Dim myWin : Set myWin = myFilteredWins(1)
> >>    ' Get the window's rectangle
> >>    Dim myWinRect : Set myWinRect = myWin.Rectangle
> >>    ' The pointer needs a screen point, so get the
> >>    ' screen rectangle of myWinRect
> >>    Dim myScreenRect : Set myScreenRect = myWinRect.ScreenRectangle
> >>    ' Now move the mouse
> >>    Mouse.Position = ScreenPoint(myScreenRect.Left, myScreenRect.Top)
> >>    Mouse.Click mbLeft, 1
> >> End If
> >>
> >> There's not much bulletproofing there, but you get the idea. You could
> >> also
> >> store the current mouse position before moving it, and then restoring it
> >> after the click. There are lots of possibilities.
> >>
> >> Aaron
> >>
> >> Tim Burgess wrote:
> >>
> >>> Hi,
> >>>
> >>> I need to locate a sub-window, move the mouse onto it then perform a
> >>> single left click.  I have the following code:
> >>>
> >>> Dim cCursor, hWnd
> >>>
> >>> ' Save the current active cursor
> >>> cCursor = ActiveCursorType
> >>> ActiveCursorType = ctMousePointer
> >>> Find( hWnd)
> >>> Mouse.Click(  mbLeft, 1)
> >>> ' Go back to the cursor the user was using ActiveCursorType = cCursor
> >>>
> >>> I realise that the Find method isn't going to do what I want, i.e.
> >>> position the active cursor (the mouse in this case) on the window, if
> >>> found, but I can't see a way of achieving this result.
> >>>
> >>> Best wishes.
> >>>
> >>> Tim Burgess
> >>> Raised Bar Ltd
> >>> PO Box 4442
> >>> Atherstone
> >>> Warwickshire
> >>> CV9 9AT
> >>>
> >>> Phone:  +44 (0)1827 719822
> >>> Email:  [EMAIL PROTECTED]
> >>> Web:  http://www.raisedbar.net
> >>>
> >>> Don't forget to vote for improved access to music and music technology
> >>> at
> >>>
> >>> http://www.raisedbar.net/petition.htm
> >>>
> >>>
> >>>
> >>
> >> --
> >> To insure that you receive proper support, please include all past
> >> correspondence (where applicable), and any relevant information pertinent
> >> to
> >> your situation when submitting a problem report to the GW Micro Technical
> >> Support Team.
> >>
> >> Aaron Smith
> >> GW Micro
> >> Phone: 260/489-3671
> >> Fax: 260/489-2608
> >> WWW: http://www.gwmicro.com
> >> FTP: ftp://ftp.gwmicro.com
> >> Technical Support & Web Development
> >>
> >>
> >
> >
>
>
> --
> When you say "I wrote a program that crashed Windows," people just
> stare at you blankly and say "Hey, I got those with the system, for
> free."
> Linus Torvalds
>

Reply via email to