[python-win32] win32ui and flashing box
Tim Roberts
timr at probo.com
Fri Jul 27 01:06:42 CEST 2007
Richard Bell wrote:
> I'm working on an application that automated IE and want to draw a flashing
> box around screen elements. I can find the coordinates OK but am a bit
> unclear on how to actually draw a box in such a fashion that when the
> flashing stops the screen is as it was before it started. A bit of
> investigation suggests that something like this ought to work:
>
> import win32gui, win32ui
> def box(hdc, x, y, w, h):
> hdc.MoveTo(x, y)
> hdc.LineTo(x+w, y)
> hdc.LineTo(x+w, y+h)
> hdc.LineTo(x, h+h)
> hdc.LineTo(x, y)
>
> hdc = win32ui.CreateDCFromHandle(win32gui.GetDesktopWindow())
>
CreateDCFromHandle creates a Python wrapper from a Windows HDC handle.
You're passing it a window handle, not a DC handle. Try this instead:
hdc = win32ui.CreateDCFromHandle( win32gui.GetDC( 0 ) )
You can use win32gui.GetDesktopWindow() instead of the 0 if you want.
They should do the exact same thing.
> But when I run the code I get a win32ui: LineTo failed exception. Is there
> a simple way of doing this?
>
This is NOT going to draw it in an erasable way. If you want to draw a
flashing box that can be removed, you need to change the ROP2 to, for
example, R2_NOT. That will invert the colors every time you draw it.
Draw it once, you see it; draw it again, it disappears.
Also note that dc.Rectangle is quicker than four LineTo calls.
--
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.
More information about the Python-win32
mailing list