Greetings --
I'm trying to embed a web browser inside a Python application. So far, the most straightforward avenue seems to be to use Mozilla or IE as an ActiveX control -- they have identical interfaces. It seems like this should go as follows:
1) Find the HWND of the window in which the control should appear
2) Create a stub object that implements IOleClientSite with no-op implementations of its methods, since we don't need them
3) Instantiate Mozilla or IE with CoCreateInstance and get the IOleObject interface
4) Call DoVerb on the control with the HWND, a rectangle giving the size and position where the control should appear, the IOleClientSite, and the constant OLEIVERB_INPLACEACTIVATE
5) Call SetExtent on the control as necessary in the future to resize it in response to parent window resizing
Then, for my application, I'll want to be able to execute Javascript in the context of the browser, and catch URL loads and trigger application events in response to them. All of these things appear to be possible with the IWebBrowser family of interfaces (for which I seem to have a nice type library, incidentally.)
The first problem I've run into is that pythoncom doesn't wrap IOleObject, so there's no way to make the call to DoVerb. (Nor is DoVerb exposed through IDispatch :)) In other words:
unk = pythoncom.CoCreateInstance("Mozilla.Browser", None, pythoncom.CLSCTX_INPROC, pythoncom.IID_IUnknown)
IID_IOleObject = IID('{00000112-0000-0000-C000-000000000046}')
obj = c.QueryInterface(IID_IOleObject)
-> TypeError: There is no interface object registered that supports this IID
A few questions:
* How hard would it be for me to put together a wrapping of IOleObject, IOleClientSite, and whatever else I need to embed a basic ActiveX control?
* Is there some other way that I missed to do this without wrapping new interfaces (like some IDispatch trick?)
* Is this approach to embedding a web browser tractable at all? Is there as easier way? Has anyone had any luck embedding Mozilla in Python on win32 through a more direct mechanism, like PyXPCOM? (I haven't been able to find any stories about that happening on the web.)
FWIW, this is for the Windows port of the desktop video player for the Participatory Culture Foundation's internet TV project. Check it out at http://www.participatoryculture.org/. For the actual widget set, I have started out in PyGTK, for skinning support and to ease Linux portability. It's not at all hard to pull HWND's out of PyGTK. If the idea of embedding an ActiveX control in PyGTK seems hilariously wrong to you for some reason that has eluded me, do let me know :)
Thanks a lot -- Geoff Schmidt
_______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32