602
社区成员
发帖
与我相关
我的任务
分享
procedure TFormAAA.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('www.ccrun.com');
end;
#include <mshtml.h>
#include <oleacc.h>
#include <atl\atlbase.h>
//---------------------------------------------------------------------------
// 从WebBrowser窗口获取IHTMLDocument2接口
IHTMLDocument2 *CrnGetDocInterfaceFromHandle(HANDLE hWnd)
{
if (hWnd == NULL || !IsWindow(hWnd))
return NULL;
IHTMLDocument2 *spDoc = NULL;
HINSTANCE hInst = ::LoadLibrary(TEXT("OLEACC.DLL"));
if (hInst)
{
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage(TEXT("WM_HTML_GETOBJECT"));
::SendMessageTimeout(hWnd, nMsg, 0L, 0L,
SMTO_ABORTIFHUNG, 10, (DWORD *)&lRes);
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)
::GetProcAddress(hInst, TEXT("ObjectFromLresult"));
if (pfObjectFromLresult != NULL)
{
HRESULT hr = (*pfObjectFromLresult)
(lRes, IID_IHTMLDocument, 0, (void**)&spDoc);
if (SUCCEEDED(hr))
{
IDispatch *pDisp;
IHTMLWindow2 *pWin;
spDoc->get_Script(&pDisp);
pDisp->QueryInterface(IID_IHTMLWindow2, (void **)&pWin);
pDisp->Release();
pWin->get_document(&spDoc);
pWin->Release();
}
}
::FreeLibrary(hInst);
}
return spDoc;
}
//---------------------------------------------------------------------------
// 查找指定窗口中的WebBrowser窗口句柄
HWND CrnFindWebBrowserHandle()
{
// 注意FindWindow中指定的类名和窗口标题,这里仅仅是演示
HWND hTopWnd = ::FindWindow(TEXT("TFormAAA"), TEXT("FormAAA"));
HWND hChildWnd = NULL;
if (hTopWnd && ::IsWindow(hTopWnd))
{
// 按层次查找IE页面句柄
hChildWnd = ::FindWindowEx(hTopWnd, NULL, TEXT("Shell Embedding"), TEXT(""));
hChildWnd = ::FindWindowEx(hChildWnd, NULL, TEXT("Shell DocObject View"), TEXT(""));
hChildWnd = ::FindWindowEx(hChildWnd, NULL, TEXT("Internet Explorer_Server"), TEXT(""));
}
return hChildWnd;
}
//---------------------------------------------------------------------------
// 获取HTML页面中Body段的HTML代码
String CrnGetHtmlBodyHtml()
{
String strResult("");
HWND hWnd = CrnFindWebBrowserHandle();
if (::IsWindow(hWnd))
{
IHTMLDocument2 *spDoc = CrnGetDocInterfaceFromHandle(hWnd);
if (spDoc)
{
IHTMLElement *pElement;
wchar_t *wszText;
if (SUCCEEDED(spDoc->get_body(&pElement)))
pElement->get_outerHTML(&wszText);
pElement->Release();
strResult = String(wszText);
}
}
return strResult;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Text = CrnGetHtmlBodyHtml();
}