WebBrowser control ohne Window & Co im gleichen Prozess

12/06/2010 - 22:54 von Peter Mairhofer | Report spam
Hi,

Ich möchte ganz einfach ein WebBrowser Control instanzieren, Seite laden
und drucken. Ohne Fenster & Co, das ganze soll im Hintergrund funktionieren.

Das geht:

CComPtr<IWebBrowser2> browser;
browser.CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER);
browser->Navigate(url, 0, 0, 0, 0);
// ... (auf ready state warten)
browser->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, 0, 0);

Das Problem ist jetzt aber dass der Internet Explorer in einem neuen
Prozess startet. Das darf aber NICHT sein! Der WB muss in meinem Fall im
gleichen Prozess laufen!

Mit CLSCTX_INPROC_SERVER kann man den Internet Explorer offenbar nicht
instanzieren, also verwende ich stattdessen:

browser.CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER);

Das geht zwar, allerdings erhalte ich dann bei Navigate E_FAIL.

Möglicherweise weil ich kein Fenster oder Control attached habe...

Wie schaffe ich es möglichst einfach einen WebBrowser zu erstellen, wo
ich einfach (wie oben) Navigate und ExecWB ausführen kann, aber im
gleichen Prozess làuft?


LG
Peter
 

Lesen sie die antworten

#1 Martin Richter [MVP]
14/06/2010 - 08:59 | Warnen spam
Hallo Peter Mairhofer!

Ich möchte ganz einfach ein WebBrowser Control instanzieren, Seite laden
und drucken. Ohne Fenster & Co, das ganze soll im Hintergrund
funktionieren.

Das geht:

CComPtr<IWebBrowser2> browser;
browser.CoCreateInstance(CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER);



Falsche Class-ID. Es müsste CLSID_WebBrowser sein!

Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com

Ähnliche fragen