By way of thanks to Tim (who helped with the flash code) and Mark (who
posted the CastTo clue last year) here's a working example that:
- opens a browser
- navigates to google
- finds the query tag
- flashes it
- finds the button tag
- flashes it
Thanks for your help.
If anyone wants to use it, know that I've not tested the code extensively.
The usual disclaimers about fitness definitely apply.
BTW, there's an interesting bit of fuss in getting the tag's screen
coordinates. It turned out to be a bit trickier than I'd expected.
Regards,
Richard
--- code ---
import win32com.client
import win32gui
import win32ui
import pprint
import time
def flashTag(tag):
top, left, bottom, right = cord(tag)
flash(top, left, bottom, right)
def cord(tag):
# get the offset
# see http://www.webreference.com/dhtml/diner/realpos1/
# see http://msdn2.microsoft.com/en-us/library/ms530302.aspx
nL = tag.offsetLeft
nT = tag.offsetTop
eP = tag.offsetParent
while eP:
if eP.__class__.__name__ == 'IHTMLElement':
eP = eP.document.all.item(eP.sourceIndex)
if(eP.tagName <> 'TABLE'): # modified from ref since
want on screen not BODY relative
nL += eP.clientLeft
nT += eP.clientTop
nL += eP.offsetLeft
nT += eP.offsetTop
eP = eP.offsetParent
# get the doc
doc = tag.ownerDocument # the doc
pwin = doc.parentWindow # its parent HTML style window
pwin2 = win32com.client.CastTo(pwin, 'IHTMLWindow3') # the cast to
get to screen...
top = pwin2.screenTop + nT # screen cords for HTML style window
left = pwin2.screenLeft + nL
return (top, left, top+tag.offsetHeight, left+tag.offsetWidth)
def flash(top, left, bottom, right):
gui_dc = win32gui.GetDC(0) # int handle screen DC
pycdc = win32ui.CreateDCFromHandle(gui_dc) # PyCDC object
pycdc.SetROP2(7) # R2_XOR
brush = win32ui.CreateBrush(0, 0, 0) # create a brush (solid,
no color)
pycdc.SelectObject(brush) # put it in the dc
pen = win32ui.CreatePen(0, 3, 0x00ff00) # colorref is 0x00bbggrr
pycdc.SelectObject(pen) # put it in the dc
cord = (left, top, right, bottom)
for i in range(0,5):
pycdc.Rectangle(cord) # make a solid rectangle
time.sleep(.250) # hang out
pycdc.Rectangle(cord) # put the screen back
time.sleep(.250) # hang out
win32gui.ReleaseDC(gui_dc,0) # all I have to release?
def DomEleToNode(element):
xx = element.document.all.item(element.sourceIndex)
return xx
time.time()
ie = win32com.client.DispatchEx('InternetExplorer.Application')
ie.Visible = 1
ie.Navigate('www.google.com')
time.sleep(3)
queryHTML = ie.Document.all.tags('INPUT').namedItem('q')
flashTag(queryHTML)
btnTag = ie.Document.all.tags('INPUT').namedItem('btnG')
flashTag(btnTag)
--- end code ---
_______________________________________________
Python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32