CWebBrowser2(MSIE控件)如何获取已经显示在其内的网页的源代码?

qiek 2004-12-30 02:51:51
100分只给一个人!
...全文
197 点赞 收藏 6
写回复
6 条回复
qiek 2005年01月02日
现在用不着了,所以没机会试,就看着给分吧
回复 点赞
qrlvls 2004年12月30日
see see 而已
回复 点赞
zhaolaoxin 2004年12月30日
xx
回复 点赞
kingzai 2004年12月30日
1.USE MSHTML
void CMyHtmlView::OnSource()
{
IHTMLDocument2 doc;
HGLOBAL hMem = NULL;
LPSTREAM pStream = NULL;
IPersistStreamInit *pPersistStream = NULL;
ULARGE_INTEGER uli;
HRESULT hr;
doc=GetHtmlDocument();
hr = ptrDoc.QueryInterface(IID_IPersistStreamInit, &pPersistStream);
if(pPersistStream == NULL)
return;
if(FAILED(pPersistStream->GetSizeMax(&uli)))
{
pPersistStream->Release();
return;
}
uli.LowPart = 65536;
hMem = ::GlobalAlloc(GPTR, uli.LowPart);
if(hMem == NULL)
{
pPersistStream->Release();
return;
}

hr = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream);
if(FAILED(hr))
{
pPersistStream->Release();
::GlobalFree(hMem);
return;
}
hr = pPersistStream->Save(pStream, TRUE);

AfxMessageBox((LPCTSTR)hMem);
::GlobalUnlock(hMem);
::GlobalFree(hMem);
hr = pPersistStream->Release();
pStream->Release();
}
2.implementing the "View Source" option in Internet Explorer


void CMyBrowser::OnViewSource()
{
CWnd* pWnd = NULL;

CWnd* pwndShell = m_WebBrowser2.GetWindow(GW_CHILD); // get the webbrowser window pointer

if (pwndShell)
{
pWnd = pwndShell->GetWindow(GW_CHILD); //get the child window pointer
}

if(pWnd != NULL)
{
WPARAM wParam = MAKELONG(IDM_VIEWSOURCE, 1); //convert to unsigned 32 bit value and pass it to WPARAM
pWnd->SendMessage(WM_COMMAND, wParam, (LPARAM)pWndHTML->m_hWnd); //cool send a message to retreive the source.
}
}
http://www.vckbase.com/document/上面的一篇文章
回复 点赞
stavck 2004年12月30日
路过,
CoInitialize(NULL);//每个线程必须单独使用

SHDocVw::IShellWindowsPtr spSHWinds;

if(spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
{
CString str = _T("创建浏览器对象失败,无法从取得浏览器信息");
SetErrorMessage(str);
return FALSE;
}

CString strData;
IDispatchPtr spDisp;

BOOL bRet = FALSE;

long nCount = spSHWinds->GetCount();
char * pBuf = NULL;

for (long i = 0; i < nCount; i++)
{
_variant_t va(i, VT_I4);
spDisp = spSHWinds->Item(va);
if(spDisp != NULL)
{
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (spBrowser != NULL)
{
MSHTML::IHTMLDocument2Ptr spDoc(spBrowser->GetDocument());
if (spDoc != NULL)
{
//字符串转换
pBuf = _com_util::ConvertBSTRToString(spDoc->Gettitle());
CString strTitle1 = pBuf;
delete [] pBuf;
pBuf = NULL;

//判断网页标题,
if(strTitle1 == strTitle)
{
MSHTML::IHTMLElement* pElement;
spDoc->get_body(&pElement);

BSTR str;
pElement->get_innerHTML(&str);
pBuf = _com_util::ConvertBSTRToString(str);
strData = pBuf;//strData就是网页内容
delete [] pBuf;
pBuf = NULL;


pElement->Release();
}
spDoc.Release();
}
spBrowser.Release();
}
spDisp.Release();
}
}

spSHWinds.Release();
CoUninitialize();
回复 点赞
蒋晟 2004年12月30日
可以查询浏览器控件中的HTMLDocument2对象的IPersistStream接口,之后调用其Save方法,传递CreateStreamOnHGlobal创建的内存流对象的IStream接口指针作为参数。之后可以用GetHGlobalFromStream函数获得内存流对象的内存句柄,使用GlobalLock和GlobalUnlock来访问其中的数据。
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

7880

社区成员

6.4w+

社区内容

VC/MFC 网络编程
社区公告
暂无公告