I think is a fundamental misunderstanding that will plague many JAWS
scripters who are moving over to Window-Eyes.
Using Window-Eyes objects is going to be far more reliable because
you're using dependable methodology that's been in place for years, and
is tried and tested. The only difference is that now it's exposed
through a COM interface.
Besides, I don't think that dividing a couple of lengths by 2 is all
that much of a calculation, is it?
Aaron
Marlon Brandão de Sousa wrote:
yep, thanks. But what I wanted to do is knowing if the sendmessage
method would really be more reliable, as I think.
I tend to do things the more low level possible, to aquire time and
also to avoid big calculations.
Marlon
2008/10/14, Jamal Mazrui <[EMAIL PROTECTED]>:
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: gw-scripting@gwmicro.com
To: gw-scripting@gwmicro.com
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: gw-scripting@gwmicro.com
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
--
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