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 >
