在ActiveX控件中获取顶级的页面IWebBrowser2指针
- CComPtr<IOleClientSite> spClientSite;
- hr = GetClientSite(&spClientSite);
- if (SUCCEEDED(hr))
- {
- CComPtr<IServiceProvider> isp, isp2;
- hr = spClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&isp));
- if (SUCCEEDED(hr))
- {
- hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void**>(&isp2));
- if (SUCCEEDED(hr))
- {
- CComPtr<IWebBrowser2> spBrowser;
- hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&spBrowser));
- if (SUCCEEDED(hr))
- {
- CComBSTR bstrFullName;
- hr = spBrowser ->get_Path( &bstrFullName );
- PTCHAR lpNewVal = (PTCHAR)_com_util::ConvertBSTRToString(bstrFullName);
- MessageBox( lpNewVal, "show", MB_OK );
- /*
- //--------获取控件所在页面的URL---------------------
- CComBSTR bstrFullName;
- hr = spBrowser ->get_LocationURL( &bstrFullName );
- if (SUCCEEDED(hr))
- {
- CString strCurDir(bstrFullName);
- strCurDir.Replace("%20"," ");
- int nEndPos = strCurDir.ReverseFind('/');
- if (nEndPos < 0){
- nEndPos = strCurDir.ReverseFind('//');
- }
- int nStartPos = strCurDir.FindOneOf("file:///");
- if( nStartPos < 0 ){
- nStartPos = 0;
- }else {
- nStartPos=8;
- nEndPos -= 7;
- }
- if (nBufLen >= nEndPos)
- {
- strCurDir = strCurDir.Mid(nStartPos, nEndPos);
- strcpy (lpBuffer,strCurDir.GetBuffer(strCurDir.GetLength()));
- return nEndPos;
- }
- }
- */
- }
- }
- }
- }