获取IE正在浏览的网页的URL解决方法

获取IE正在浏览的网页的URL
RT
也搜过这个主题,可是回答都是用FindWindow找到IE的地址栏文本框再GetText。可是,地址栏显示什么不代表真正的URL就是什么。有些网站,点来点去,地址栏里就是只显示同一个东东,XXX.XXX.XXX。这个时候该怎么办?
顺带问,浏览网页时一般源文件是已经下载下来的,可以从本地直接获得这个文件吗?

------解决方案--------------------
监控HTTP数据包进行分析
可使用Winpcap库,很方便的
------解决方案--------------------
获得浏览器的IWebBrowser2接口后,调用GetLocationUrl方法即可获得
------解决方案--------------------
给你个例子
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
TCHAR buf[100];
::GetClassName( hwnd, (LPTSTR)&buf, 100 );
if ( _tcscmp( buf, _T( "Internet Explorer_Server ") ) == 0 )
{
*(HWND*)lParam = hwnd;
return FALSE;
}
else
return TRUE;
}
void CDlg::OnGetURL(HWND hWnd) // hWnd是浏览器窗口句柄
{
CoInitialize( NULL );

HINSTANCE hInst = ::LoadLibrary( _T( "OLEACC.DLL ") );
if ( hInst != NULL )
{
if ( hWnd != NULL )
{
HWND hWndChild=NULL;
// Get 1st document window
::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
if ( hWndChild )
{
CComPtr <IHTMLDocument2> spDoc;
LRESULT lRes;

UINT nMsg = ::RegisterWindowMessage( _T( "WM_HTML_GETOBJECT ") );
::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T( "ObjectFromLresult ") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
if ( SUCCEEDED(hr) )
{
CComPtr <IDispatch> spDisp;
CComQIPtr <IHTMLWindow2> spWin;
spDoc-> get_Script( &spDisp );
spWin = spDisp;
spWin-> get_document(&spDoc.p);
BSTR str;
spDoc-> get_URL(&str);
CString strText = str; //这个是URL
}
}
}


}
}
CoUninitialize();
}