You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.0 KiB
108 lines
3.0 KiB
import unittest as ut
|
|
from ctypes import *
|
|
from comtypes.client import CreateObject, GetEvents
|
|
|
|
import comtypes.test
|
|
comtypes.test.requires("ui")
|
|
|
|
class EventSink:
|
|
def __init__(self):
|
|
self._events = []
|
|
|
|
# some DWebBrowserEvents
|
|
def OnVisible(self, this, *args):
|
|
## print "OnVisible", args
|
|
self._events.append("OnVisible")
|
|
|
|
def BeforeNavigate(self, this, *args):
|
|
## print "BeforeNavigate", args
|
|
self._events.append("BeforeNavigate")
|
|
|
|
def NavigateComplete(self, this, *args):
|
|
## print "NavigateComplete", args
|
|
self._events.append("NavigateComplete")
|
|
|
|
# some DWebBrowserEvents2
|
|
def BeforeNavigate2(self, this, *args):
|
|
## print "BeforeNavigate2", args
|
|
self._events.append("BeforeNavigate2")
|
|
|
|
def NavigateComplete2(self, this, *args):
|
|
## print "NavigateComplete2", args
|
|
self._events.append("NavigateComplete2")
|
|
|
|
def DocumentComplete(self, this, *args):
|
|
## print "DocumentComplete", args
|
|
self._events.append("DocumentComplete")
|
|
|
|
|
|
class POINT(Structure):
|
|
_fields_ = [("x", c_long),
|
|
("y", c_long)]
|
|
|
|
class MSG(Structure):
|
|
_fields_ = [("hWnd", c_ulong),
|
|
("message", c_uint),
|
|
("wParam", c_ulong),
|
|
("lParam", c_ulong),
|
|
("time", c_ulong),
|
|
("pt", POINT)]
|
|
|
|
def PumpWaitingMessages():
|
|
from ctypes import windll, byref
|
|
user32 = windll.user32
|
|
msg = MSG()
|
|
PM_REMOVE = 0x0001
|
|
while user32.PeekMessageA(byref(msg), 0, 0, 0, PM_REMOVE):
|
|
user32.TranslateMessage(byref(msg))
|
|
user32.DispatchMessageA(byref(msg))
|
|
|
|
class Test(ut.TestCase):
|
|
|
|
def tearDown(self):
|
|
import gc
|
|
gc.collect()
|
|
import time
|
|
time.sleep(2)
|
|
|
|
def test_default_eventinterface(self):
|
|
sink = EventSink()
|
|
ie = CreateObject("InternetExplorer.Application")
|
|
conn = GetEvents(ie, sink=sink)
|
|
ie.Visible = True
|
|
ie.Navigate2(URL="http://docs.python.org/", Flags=0)
|
|
import time
|
|
for i in range(50):
|
|
PumpWaitingMessages()
|
|
time.sleep(0.1)
|
|
ie.Visible = False
|
|
ie.Quit()
|
|
|
|
self.assertEqual(sink._events, ['OnVisible', 'BeforeNavigate2',
|
|
'NavigateComplete2', 'DocumentComplete',
|
|
'OnVisible'])
|
|
|
|
del ie
|
|
del conn
|
|
|
|
def test_nondefault_eventinterface(self):
|
|
sink = EventSink()
|
|
ie = CreateObject("InternetExplorer.Application")
|
|
import comtypes.gen.SHDocVw as mod
|
|
conn = GetEvents(ie, sink, interface=mod.DWebBrowserEvents)
|
|
|
|
ie.Visible = True
|
|
ie.Navigate2(Flags=0, URL="http://docs.python.org/")
|
|
import time
|
|
for i in range(50):
|
|
PumpWaitingMessages()
|
|
time.sleep(0.1)
|
|
ie.Visible = False
|
|
ie.Quit()
|
|
|
|
self.assertEqual(sink._events, ['BeforeNavigate', 'NavigateComplete'])
|
|
del ie
|
|
|
|
if __name__ == "__main__":
|
|
ut.main()
|