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;