這是關於獲取當IE所打開的URL地址(VC++),並且自動打印出相應的網址源代碼內容:
//將這個放入你的頭文件stdafx.h中 #import <mshtml.tlb> #import <shdocvw.dll> void CGetIESrcDlg::GetRunningIESrc() { SHDocVw::IShellWindowsPtr m_spSHWinds; CoInitialize(NULL); if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK) { IDispatchPtr spDisp; long nCount = m_spSHWinds->GetCount(); for (long i = 0; i < nCount; i++) { _variant_t va(i, VT_I4); spDisp = m_spSHWinds->Item(va); SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); if (spBrowser != NULL) { IDispatchPtr spDisp; if(spBrowser->get_Document(&spDisp) == S_OK && spDisp!= 0 ) { MSHTML::IHTMLDocument2Ptr spHtmlDocument(spDisp); MSHTML::IHTMLElementPtr spHtmlElement; if(spHtmlDocument==NULL) continue; spHtmlDocument->get_body(&spHtmlElement); if(spHtmlDocument==NULL) continue; _bstr_t str ; str=spBrowser->GetLocationURL();//URL of IE window(); AfxMessageBox(str); MSHTML::IHTMLDocument3* pHTMLDoc3; HRESULT hr = spHtmlDocument->QueryInterface(__uuidof(MSHTML::IHTMLDocument3),(LPVOID*)&pHTMLDoc3); ASSERT(SUCCEEDED(hr)); MSHTML::IHTMLElement* pDocElem; hr = pHTMLDoc3->get_documentElement(&pDocElem); pHTMLDoc3->Release(); ASSERT(SUCCEEDED(hr)); BSTR bstrHTML; pDocElem->get_outerHTML(&bstrHTML); pDocElem->Release(); AfxMessageBox(CString(bstrHTML)); SysFreeString(bstrHTML); } break; } } } else { AfxMessageBox("Shell Windows interface is not avilable"); } CoUninitialize(); }
說明:簡單遍歷了整個網頁的所有節點,找出容器當中的第一個頁面(多個IE頁面的第一頁),然後進行遍歷取出所有子節點並打印。大家可以測試一下,因為有時候網頁過大會出現假死現象,這段代碼本工作室測試的時候,可以使用,但用到IE7,IE8這樣多標簽頁的浏覽器裡要查到每一標簽頁的內容可能還需要改動一下,有興趣的朋友自己試試吧!