Article View: borland.public.cppbuilder.internet.web
Article #990Re: Connecting IE to a running instance.
From: Enrique
Date: Sat, 08 Oct 2005 02:51
Date: Sat, 08 Oct 2005 02:51
150 lines
6597 bytes
6597 bytes
this fails too:
void __fastcall TForm1::CppWebBrowser1NewWindow2(TObject *Sender,
LPDISPATCH *ppDisp, TOLEBOOL *Cancel)
{
CppInternetExplorer1->ConnectKind = ckAttachToInterface;
CppInternetExplorer1->ConnectTo(*ppDisp);
}
"Enrique" <enridp@yahoo.com.ar> escribi� en el mensaje
news:43471a45@newsgroups.borland.com...
> I'm trying to connect to a running instance of Internet Explorer, and then
> intercept its events.
> I know this is a recurrent question/problem, and there is a lot of
> information. But i'm very new and I could not make it work.
> I was thinking of using the TCppInternetExplorer to connect to IE.
> But I think the BCB help is wrong, it says:
>
////////////////////////////////////////////////////////////////////////////
> //////////////////////////////////////////////////////////
> Call ConnectTo to attach to an existing instance of InternetExplorer. The
> intf parameter specifies the interface of the server to which you want to
> connect. Typically, this value is obtained from a call to GetActiveObject,
> which returns an IUnknown interface you can bind to an IWebBrowser2
> interface wrapper using the assignment operator:
>
> IUnknown *pUnk;
> HResult Result = GetActiveObject(CLSID_InternetExplorer, NULL, &pUnk);
> if (Result == S_OK)
> {
> IWebBrowser2Ptr WB = pUnk;
> InternetExplorer1->ConnectKind = ckAttachtoInterface;
> InternetExplorer1->ConnectTo(WB);
> }
>
> Before calling ConnectTo, set the ConnectKind property to
> ckAttachToInterface.
>
////////////////////////////////////////////////////////////////////////////
> //////////////////////////////////////////////////////////
> And searching in google i found that GetActiveObject doesn't work with IE.
>
> MSDN has a sample code but I can't understand it (and "translate" it to
> BCB):
> --------------------------------------------------------------------------
--
> -----------------------------------------------------------
> It say:
> Add references to Shdocvw.dll and Mshtml.dll to the project:
> #import <mshtml.dll> // Internet Explorer 4.0x
> #import <mshtml.tlb> // Internet Explorer 5
> #import <shdocvw.dll>
>
> I do:
> Project - Import Type Library - Microsoft HTML Object Library (version
> 4.0) - Create Unit. (then i include the unit to my form)
> Project - Import Type Library - Microsoft Internet Controls (Version
1.1) -
> Create Unit. (it gives me an error: "A class named 'TCppWebBrowser' is
> already installed")
> --------------------------------------------------------------------------
--
> -----------------------------------------------------------
> Then, MSDN:
> Declare an instance of an IShellWindows pointer in your view class:
> SHDocVw::IShellWindowsPtr m_spSHWinds;
> I do that in my TForm header, public section.
> But it gives to me compile errors:
> E2090 : Qualifier 'SHDocVw' is not a class or namespace name
> So I add the proccesor line:
> #import <shdocvw.dll>
> and i receive Multiple declaration errors, the multiple declarations are
in
> "utilcls.h" and "comdef.h"
> utilcls.h is included in MSHTML_TLB.h, and i can�t find comdef.h (i think
> it's included by shdocvw.dll)
> So I comment the line #include "MSHTML_TLB.h"
> Now it compile.
> --------------------------------------------------------------------------
--
> -----------------------------------------------------------
> MSDN:
> Create an instance of a ShellWindows object in your view's constructor:
> m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
> I add this in TForm constructor.
> Errors:
> E2316 : ShellWindows is not a member of 'SHDocVw'
> I don't know how to solve this.
> --------------------------------------------------------------------------
--
> -----------------------------------------------------------
> finally, MSDN (I add comments in lines that I don't understand (almost all
> :-))
> Use the ShellWindows object in your view's OnInitialUpdate function:
> void CConnectIEView::OnInitialUpdate() //What's this method? can i
create
> my own in TForm?
> {
> CFormView::OnInitialUpdate(); //and this??
>
> ASSERT(m_spSHWinds != NULL); //BCB doesn't know ASSERT
>
> CString strCount; //BCB doesn't know CString, can i use AnsiString?
(or
> string...)
> long nCount = m_spSHWinds->GetCount();
>
> strCount.Format("%i", nCount);
> m_strWinCount = strCount;
>
> UpdateData(FALSE); //BCB doesn't know UpdateData
>
> IDispatchPtr spDisp;
> for (long i = 0; i < nCount; i++)
> {
> _variant_t va(i, VT_I4); //_variant_t? i must use Variant? or
> TVariant?
> spDisp = m_spSHWinds->Item(va);
>
> SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //linker error!
> if (spBrowser != NULL)
> {
> m_ctlListLoc.AddString(spBrowser->GetLocationName()); //what
is
> m_ctlListLoc??
>
> MSHTML::IHTMLDocument2Ptr spDoc(spBrowser->GetDocument());
> if (spDoc != NULL)
> {
> m_ctlListTitle.AddString(spDoc->Gettitle());
> //and m_ctlListTitle?
> }
> }
> }
> }
> --------------------------------------------------------------------------
--
> ----------------------------------------------------
> Therefore... I don't know how to do it =)
> I really need some help.
> Thanks you to read me.
> enrique.
>
> PD: is it easier to connect if i create the IE instance from my app?... I
> mean, the user clicks on a link (_blank taget) on my CppWebBrowser and
then
> an IE instance is created automatically... and i want to control it too.
>
>
>
Technical Details
Message-ID:
<434733af@newsgroups.borland.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!fr.ip.ndsoftware.net!news-out.newsgroups.com!propagator2-sterling.newsfeeds.com!in.nntp.be!caladan.landsraad.net!newsgroups.borland.com!not-for-mailReferences:
<43471a45@newsgroups.borland.com>Show Full Headers
Complete Article Headers
X-Google-Thread: feeec,2fc8286bda6a7885 X-Google-Attributes: gidfeeec,public X-Google-Language: ENGLISH,ASCII Reply-To: "Enrique" <enridp@yahoo.com.ar> From: "Enrique" <enridp@yahoo.com.ar> Newsgroups: borland.public.cppbuilder.internet.web References: <43471a45@newsgroups.borland.com> Subject: Re: Connecting IE to a running instance. Date: Fri, 7 Oct 2005 23:51:23 -0300 Lines: 152 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1158 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 NNTP-Posting-Host: 200.43.250.147 Message-ID: <434733af@newsgroups.borland.com> X-Trace: newsgroups.borland.com 1128739759 200.43.250.147 (7 Oct 2005 19:49:19 -0700) Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!fr.ip.ndsoftware.net!news-out.newsgroups.com!propagator2-sterling.newsfeeds.com!in.nntp.be!caladan.landsraad.net!newsgroups.borland.com!not-for-mail