如何实现IE的COM接口 ,从而用Vc++编程控制它?

heroson 2000-04-05 11:27:00
如何实现IE的COM接口 ,从而用Vc++编程控制它?譬如,获取用户输入的地址及其他信息?
这厢有礼了。
...全文
481 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hillman 2001-07-03
  • 打赏
  • 举报
回复
xielm()兄:
按照你提供的代码,确实能从IE里读取HTML源码,但是当页面是多帧结构时,只能读出页面结构的代码,各个帧的代码依然无法读出,请问这又该怎样解决呢?
halfdream 2000-04-19
  • 打赏
  • 举报
回复
关注
daweia 2000-04-19
  • 打赏
  • 举报
回复
那怎样得到IE连接的地址呢,望不吝赐教
xielm 2000-04-05
  • 打赏
  • 举报
回复
我曾用VC取得当前IE浏览器的内容。我想你可举一反三,如下代码。


BOOL GetIEActiveHTML(LPCTSTR TmpSavePathName ,CString & URL)
{

HRESULT r;
WORD wsz[MAX_PATH];
CLSID clsid;
CLSID iid;

//get COM CoShellWindows class CLSID;
MultiByteToWideChar(CP_ACP, 0, "{9BA05972-F6A8-11CF-A442-00A0C90A8F39}", -1,
wsz, MAX_PATH);
r = CLSIDFromString(wsz,&clsid);

//get COM CoShellWindows interface IID;
MultiByteToWideChar(CP_ACP, 0, "{85CB6900-4D95-11CF-960C-0080C7F4EE85}", -1,
wsz, MAX_PATH);
r = CLSIDFromString(wsz,&iid);


IClassFactory *pFac;
IUnknown * pUnk;
IWebBrowser2 * pWeb2;
//IPersistFile* ppf;
IShellWindows *pWins;

r = CoInitialize(NULL);//Initial COM

//Create new shellwindows
r = CoGetClassObject(clsid,5,0, IID_IClassFactory,(LPVOID *) &pFac);
r = pFac->CreateInstance(0,IID_IUnknown,(void **) &pUnk);
if (pFac) pFac->Release ();
else return 0;
r = pUnk->QueryInterface(iid,(void **) &pWins);
if (pUnk) pUnk->Release ();
else return 0;

long count;
// IDispatch * pDisp;
IDispatch * pItem;

if (!pWins) return 0;
pWins->get_Count (&count);

COleVariant pos;
long i = count - 1;
BOOL IEStart = 0;
CComBSTR CBstr;
CString HtmlText;
IDispatch * pAllItem;
IDispatch * pDoc;
IHTMLDocument2 * pDocObj;
CLSID IID_DOC2;
MultiByteToWideChar(CP_ACP, 0, "{332C4425-26CB-11D0-B483-00C04FD90119}", -1,
wsz, MAX_PATH);
r = CLSIDFromString(wsz,&IID_DOC2);

while( i >= 0 )
{
pos = (long)(i);
r = pWins->Item (pos,(IDispatch **)&pItem);

r = pItem->QueryInterface(IID_IWebBrowser2,(void **) &pWeb2);
if (pItem) pItem->Release ();
else return 0;

r = pWeb2->get_Document (&pDoc);
if (pWeb2) pWeb2->Release ();

if (pDoc)
{
r = pDoc->QueryInterface (IID_DOC2,(void **)&pDocObj);
pDoc->Release ();
if (SUCCEEDED(r))
{
r = pDocObj->get_URL (&CBstr);
URL = CBstr.m_str;

IHTMLElementCollection * pAll;
r = pDocObj->get_all (&pAll);
pDocObj->Release ();

EXCEPINFO excepinfo;
UINT nArgErr;
VARIANT vRet;
// DISPPARAMS FAR* pdisp;

DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};


MultiByteToWideChar(CP_ACP, 0, "outerHTML", -1,
wsz, MAX_PATH);
OLECHAR FAR* szMember = wsz;
long AllNum;
VARIANT name,index;
DISPID dispid;
pAll->get_length (&AllNum);
CFile file;

name.vt = VT_I4;
index.vt = VT_I4;
file.Open (TmpSavePathName,CFile::modeCreate and CFile::modeReadWrite);

for (long k = 0 ; k < AllNum ; k++)
{

name.lVal = k;
index.lVal = k;
r = pAll->item (name,index,(IDispatch ** )&pAllItem);
r = pAllItem->GetIDsOfNames(
IID_NULL,
(OLECHAR FAR* FAR* )&szMember,
1,
LOCALE_SYSTEM_DEFAULT,
&dispid
);
r = pAllItem->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dispparamsNoArgs, &vRet, &excepinfo, &nArgErr);
pAllItem->Release ();
if (SUCCEEDED(r))
{
HtmlText = vRet.bstrVal ;
if (HtmlText.Find ("<HTML>",0) != -1)
{
file.Write (HtmlText,HtmlText.GetLength());
if (HtmlText.Find ("</HTML>",0) != -1)
break;
}
}

}
file.Close ();
pAll->Release ();

IEStart = 1;
break;

}
}
i--;
}
return IEStart;
}
/*
while( i >= 0 )
{
pos = (long)(i);
r = pWins->Item (pos,(IDispatch **)&pItem);

r = pItem->QueryInterface(IID_IWebBrowser2,(void **) &pWeb2);
if (pItem) pItem->Release ();
else return 0;

r = pWeb2->get_Document (&pDisp);
r = pWeb2->get_LocationURL (&(CBstr));
URL = CBstr.m_str ;

if (pWeb2) pWeb2->Release ();

if (pDisp)
{
r = pDisp->QueryInterface(IID_IPersistFile,(void **) &ppf);
if (SUCCEEDED(r))
{
MultiByteToWideChar(CP_ACP, 0, TmpSavePathName, -1,
wsz, MAX_PATH);


r = ppf->Save (wsz,STGM_READWRITE);
pDisp->Release ();
ppf->Release();
IEStart = 1;

break;
}
pDisp->Release ();
}
i--;
}
pWins->Release ();
CoUninitialize();
if (IEStart == 0) URL = "";
return IEStart;
}
*/
「已注销」 2000-04-05
  • 打赏
  • 举报
回复
MSDN\PLATFORM SDK\INTERNET SERVICES\INTERNET TOOLS&TECHNOLOGIES中游你需要的内容.

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧