hi there, from about a dozen different sources i've managed to put together something similar to the old ctypes atl.py example. the purpose of the exercise is to create a port of pyjamas-desktop to MSHTML, and to do that, i need a GDK window in which an IWebBrowser2 COM object is the only object, and then to get access to its Document.
i'll be committing the code as free software in the next few days to the svn repository for http://pyjs.org but i wanted to point people at this example code in the mean time: http://lkcl.net/pyjamas - ie_in_gtk.py and ie_in_win.py as you can see they're a bit of a mess because i took stuff from a boat-load of different places and just whopped it all together until something worked how i wanted. now that i have the proof-of-concept, i'll be quickly moving on to encompass absolutely every single bit of the MSHTML DOM model and i do mean absolutely all of it (and including XMLHttpRequest). the reason is that pyjamas-desktop relies on manipulation of the DOM model to create the widget set API. currently supported is XULRunner and pywebkitgtk but win32 users are left out in the cold somewhat so... MSHTML-time it is. what's particularly strategically important is that the intermediate DOM wrapper classes, of which there are two (pyjd/hula.py and pyjd/pywebkitgtk.py) make the DOM look *absolutely identical* as far as the interface is concerned. i'll be adding an _mshtml.py wrapper which - again - makes the DOM look utterly and 100% identical to the other two. just to emphasise that in a different way: with these three DOM wrapper modules it will be possible to write python web browser engine applications that will work across a ton of different platforms, whether they be Win32, Mac, GNU/Linux, FreeBSD or embedded devices. the wrapper class, _mshtml.py, it's worth noting, will take care of COM "coclass" interfaces. one of the lairy daft messes in MSHTML.IDL is the melding of different COM interfaces, and you're expected to either know or remember what to do, typecasting objects using QueryInterface to the right type, before accessing the required property or function. ... i can't be bothered with that kind of crap :) so, the _mshtml.py class will take care of it, and so instead of this: style.left = 0 style2 = style.QueryInterface(MSHTML.IHTMLStyle2) style2.position = "absolute" you just do this: style.left = 0 style.position = "absolute" ahhhh, peace of miiind :) behind the scenes, there's a coclass wrapper which inherits from the necessary classes (in this case, _mshtml.IHTMLStyle2, _mshtml.IHTMLStyle3 .... etc.) and each of those classes has properties: def _get_position(self): return wrap(self.__get_instance_IHTMLStyle3().position position = property(self._get_position,....) def __get_instance_IHTMLStyle3(self): return self.__instance__.QueryInterface(MSHTML.IHTMLStyle3) etc. etc. so - not blazingly efficient, but that's the price to pay for convenience. if you're interested, keep an eye on http://pyjs.org svn repository, pyjamas/pyjd subdirectory, over the next few days. l. -- View this message in context: http://www.nabble.com/MSHTML-wrapper-class-and-example-using-IWebBrowser2-tp24782740p24782740.html Sent from the Python - python-win32 mailing list archive at Nabble.com. _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32