您的位置:首页 > 其它

mfc操作浏览器(1)——执行超链接按钮

2014-11-11 17:53 155 查看
CComQIPtr<IHTMLDocument2> pDoc = m_WebBrowser.get_Document();
IHTMLFramesCollection2 *pCol = NULL;
HRESULT hr = pDoc->get_frames(&pCol);       //取得分贞的frame数组

ASSERT(SUCCEEDED(hr));
long FrameNum1;
hr = pCol->get_length(&FrameNum1);			//获取最外面的框架个数
VARIANT vFrame, vIndex;
IHTMLDocument2 *pDoc2 = NULL;				//我们要找的框架

for (int i = 0; i < FrameNum1; i++)
{
vIndex.vt = VT_I4;    vIndex.lVal = i;          //准备取得第0号贞
hr = pCol->item(&vIndex, &vFrame);
ASSERT(SUCCEEDED(hr));

//取得的这个接口指针,其实是IHTMLWindow2的接口指针。
IHTMLWindow2 *pWin = (IHTMLWindow2 *)vFrame.pdispVal;
hr = pWin->get_document(&pDoc2);
ASSERT(SUCCEEDED(hr));

BSTR bFramName = NULL;
hr = pWin->get_name(&bFramName);
ASSERT(SUCCEEDED(hr));

if (szFrameName == CString(bFramName))
{
SysFreeString(bFramName);
return pDoc2;
}
else
{
IHTMLFramesCollection2 *pCol3 = NULL;

hr = pDoc2->get_frames(&pCol3);				//取得分贞的frame数组
ASSERT(SUCCEEDED(hr));

long FrameNum2;
hr = pCol3->get_length(&FrameNum2);			//获取最外面的框架个数

VARIANT vFrame, vIndex;
IHTMLDocument2 *pDoc3 = NULL;				//我们要找的框架
for (int i = 0; i < FrameNum2; i++)
{
vIndex.vt = VT_I4;    vIndex.lVal = i;          //准备取得第0号贞
hr = pCol3->item(&vIndex, &vFrame);
ASSERT(SUCCEEDED(hr));

//取得的这个接口指针,其实是IHTMLWindow2的接口指针。
IHTMLWindow2 *pWin1 = (IHTMLWindow2 *)vFrame.pdispVal;
hr = pWin1->get_document(&pDoc3);
ASSERT(SUCCEEDED(hr));

BSTR bFramName = NULL;
hr = pWin1->get_name(&bFramName);
ASSERT(SUCCEEDED(hr));
if (szFrameName == CString(bFramName))
{
SysFreeString(bFramName);
return pDoc3;
}
else
{
IHTMLFramesCollection2 *pCol3 = NULL;

hr = pDoc3->get_frames(&pCol3);				//取得分贞的frame数组
ASSERT(SUCCEEDED(hr));

long FrameNum2;
hr = pCol3->get_length(&FrameNum2);			//获取最外面的框架个数

VARIANT vFrame, vIndex;
IHTMLDocument2 *pDoc4 = NULL;				//我们要找的框架
for (int i = 0; i < FrameNum2; i++)
{
vIndex.vt = VT_I4;    vIndex.lVal = i;          //准备取得第0号贞
hr = pCol3->item(&vIndex, &vFrame);
ASSERT(SUCCEEDED(hr));

//取得的这个接口指针,其实是IHTMLWindow2的接口指针。
IHTMLWindow2 *pWin1 = (IHTMLWindow2 *)vFrame.pdispVal;
hr = pWin1->get_document(&pDoc4);
ASSERT(SUCCEEDED(hr));

BSTR bFramName = NULL;
hr = pWin1->get_name(&bFramName);
ASSERT(SUCCEEDED(hr));
if (szFrameName == CString(bFramName))
{
SysFreeString(bFramName);
return pDoc4;
}
}
}
}
}

}


IHTMLDocument2 *pDoc2 = NULL; //我们要找的框架pDoc2 = FindFrame(L"mainFrame");if (pDoc2){CComQIPtr<IDispatch> pDisp;HRESULT hr = pDoc2->get_Script(&pDisp);if (SUCCEEDED(hr)){TCHAR* szRs = L"formsubmit";DISPID dispid;HRESULT hr = pDisp->GetIDsOfNames(IID_NULL, &szRs,
1,LOCALE_SYSTEM_DEFAULT, &dispid);if (SUCCEEDED(hr)){DISPPARAMS dispparams;memset(&dispparams, 0, sizeof dispparams);dispparams.cArgs = 0;//要传递的参数,注意强烈推荐用下面这个形式。传送string的时候,改为BSTR就可以。 dispparams.cNamedArgs = 0;EXCEPINFO excepInfo;memset(&excepInfo, 0, sizeof(excepInfo));CComVariant
vaResult;UINT nArgErr = (UINT)-1; // initialize to invalid arg hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);if (SUCCEEDED(hr)){return TRUE;}}}}return FALSE;

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐