Пример #1
0
bool CPhotoManager::GetElements(IHTMLDocument2Ptr spDoc)
{
	m_ElementList.clear();

	if (spDoc == NULL)
		return false;

	CComPtr<IHTMLElementCollection> spAll;
	HRESULT hr = spDoc->get_all(&spAll);
	if (FAILED(hr) || !spAll)
		return false;
		
	// Find all the IMG tags in the document
    CComPtr<IDispatch> spTagsDisp;
	hr = spAll->tags(CComVariant(CComBSTR("img")), &spTagsDisp);
	if (FAILED(hr) || !spTagsDisp)
		return false;

	CComQIPtr<IHTMLElementCollection> spTags(spTagsDisp);
	if (!spTags)
		return false;

	long nTags = 0;
	hr = spTags->get_length(&nTags);
	if (FAILED(hr))
		return false;

	bool bSuccess = false;
	for (long i=0; i < nTags; i++)
	{
		CComPtr<IDispatch> spTagDisp;
		hr = spTags->item(CComVariant(i), CComVariant(i), &spTagDisp);
		if (FAILED(hr) || !spTagDisp)
			continue;
		
		CComQIPtr<IHTMLImgElement> spObject(spTagDisp);
		if (!spObject)
			continue;

		CComBSTR bstrFileName;
		hr = spObject->get_src(&bstrFileName);
		if (FAILED(hr))
			continue;

		CString strFileName = bstrFileName;
		if (strFileName.IsEmpty())
			continue;
			
		strFileName.MakeLower();
		bool bPhoto = (strFileName.Find("photo.gif") >= 0);
		bool bCid = (strFileName.Find("cid:") >= 0);
		if (!bPhoto && !bCid)
			continue;

		PMElementInfo ElemInfo;
		ElemInfo.pTagDisp= spTagDisp;
		m_ElementList.push_back(ElemInfo);
		bSuccess = true;
	}
	
	return bSuccess;
}
Пример #2
0
void vmsFlashHelper::SaveFlashMovies_noframes(IHTMLDocument2Ptr spDoc, LPCSTR pszFolder)
{
	USES_CONVERSION;

	if (spDoc == NULL)
		return;

	IHTMLElementCollectionPtr spAll;
	HRESULT hr = spDoc->get_all(&spAll);
	if (SUCCEEDED(hr) && spAll != NULL)
	{
		
		CComVariant vTagName ("OBJECT");
        IDispatchPtr spTagsDisp;
		hr = spAll->tags (vTagName, &spTagsDisp);
		if (SUCCEEDED(hr) && spTagsDisp != NULL)
		{
			IHTMLElementCollectionPtr spTags (spTagsDisp);
			if (spTags)
			{
				long nCnt;
				hr = spTags->get_length(&nCnt);
				if (SUCCEEDED(hr))
				{
					for (long i = 0; i < nCnt; i++)
					{
						CComVariant varIdx;
						V_VT(&varIdx) = VT_I4;
						V_I4(&varIdx) = i;

						IDispatchPtr spTagDisp;
						hr = spTags->item(varIdx, varIdx, &spTagDisp);
						if (SUCCEEDED(hr) && spTagDisp != NULL)
						{
							IHTMLObjectElementPtr spObject(spTagDisp);
							if (spObject != NULL)
							{
								BSTR bstrClassID = NULL;
								hr = spObject->get_classid(&bstrClassID);
								if (SUCCEEDED(hr) && bstrClassID)
								{
									fsString strClassID = W2A (bstrClassID);
									SysFreeString (bstrClassID);
									if (lstrcmpi (strClassID, "CLSID:D27CDB6E-AE6D-11CF-96B8-444553540000") == 0)
									{
										IDispatchPtr spObj;
										spObject->get_object (&spObj);
										IShockwaveFlashPtr spFlash (spObj);
										if (spFlash != NULL)
										{
											BSTR bstr;
											spFlash->get_Movie (&bstr);
											SysFreeString (bstr);
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}

	
    CComVariant vTagName ("EMBED");
	IDispatchPtr spTagsDisp;
    hr = spAll->tags(vTagName, &spTagsDisp);
    if (SUCCEEDED(hr) && spTagsDisp != NULL)
    {
        IHTMLElementCollectionPtr spTags(spTagsDisp);
        if (spTags != NULL)
        {
            long nCnt;
            hr = spTags->get_length(&nCnt);
            if (SUCCEEDED(hr))
            {
                for (long i = 0; i < nCnt; i++)
				{
					CComVariant varIdx;
					V_VT(&varIdx) = VT_I4;
					V_I4(&varIdx) = i;

					IDispatchPtr spTagDisp;
					hr = spTags->item(varIdx, varIdx, &spTagDisp);
					if (SUCCEEDED(hr) && spTagDisp != NULL)
					{
						IHTMLEmbedElementPtr spObject(spTagDisp);
						if (spObject != NULL)
						{
							IShockwaveFlashPtr spFlash (spObject);
							if (spFlash != NULL)
							{
								BSTR bstrSrc = NULL;
								hr = spObject->get_src(&bstrSrc);
								if (SUCCEEDED(hr) && bstrSrc)
								{
									SysFreeString (bstrSrc);
								}
							}
						}
					}
				}
            }
        }
	}
}
Пример #3
0
BOOL CFlashManager::GetFlashElements(IHTMLDocument2* pDoc)
{
	CFuncLog log(g_pLog, "CFlashManager::GetFlashElements()");

	m_FlashElementList.clear();

	CComQIPtr<IHTMLDocument2> spHTML(pDoc);
	if (!spHTML)
	{
		CString szMsg;
		szMsg.Format("CComQIPtr<IHTMLDocument2> spHTML(pDoc) FAILED: pDoc==%X", pDoc); 
		GetError(szMsg);
		log.LogString(LOG_ERROR, szMsg.GetBuffer());
		return FALSE;
	}

	CComPtr<IHTMLElementCollection> spAll;
	HRESULT hr = spHTML->get_all(&spAll);
	if (FAILED(hr) || !spAll)
	{
		CString szMsg;
		szMsg.Format("spHTML->get_all(&spAll) FAILED: HR == [%X], spAll == %X", hr, spAll); 
		GetError(szMsg);
		log.LogString(LOG_ERROR, szMsg.GetBuffer());
		return FALSE;
	}

	// Find all the OBJECT tags in the document
    CComPtr<IDispatch> spTagsDisp;
	hr = spAll->tags(CComVariant(CComBSTR("object")), &spTagsDisp);
	if (FAILED(hr) || !spTagsDisp)
	{
		CString szMsg;
		szMsg.Format("if (FAILED(hr) || !spTagsDisp) FAILED: hr==%X", hr, spTagsDisp); 
		GetError(szMsg);
		log.LogString(LOG_ERROR, szMsg.GetBuffer());
		return FALSE;
	}

	CComQIPtr<IHTMLElementCollection> spTags(spTagsDisp);
	if (!spTags)
		return FALSE;

	long nCnt = 0;
	hr = spTags->get_length(&nCnt);
	if (FAILED(hr))
	{
		CString szMsg;
		szMsg.Format("spTags->get_length(&nCnt) FAILED: nCnt==%d", nCnt); 
		log.LogString(LOG_WARNING, szMsg.GetBuffer());
		return FALSE;
	}

	bool bSuccess = false;
	for (long i=0; i < nCnt; i++)
	{
		CComPtr<IDispatch> spTagDisp;
		hr = spTags->item(CComVariant(i), CComVariant(i), &spTagDisp);
		if (FAILED(hr) || !spTagDisp)
			continue;
		
		CComQIPtr<IHTMLObjectElement> spObject(spTagDisp);
		if (!spObject)
			continue;

		CComBSTR bsClassID;
		hr = spObject->get_classid(&bsClassID);
		CString szClassID(bsClassID);
		if (FAILED(hr) || !bsClassID)
		{
			CString szMsg;
			szMsg.Format("if (FAILED(hr) || !bsClassID) FAILED: hr==%X, bsClassID == %s", hr, bsClassID.m_str); 
			log.LogString(LOG_ERROR, szMsg.GetBuffer());
			continue;
		}

		szClassID.MakeUpper();
		if (szClassID.Find(FLASH_PLAYER_CLASSID) >= 0)
		{
			log.LogString(LOG_INFO, "if (szClassID.Find(FLASH_PLAYER_CLASSID) >= 0) is TRUE");
		
			ElementInfo ElemInfo;
			ElemInfo.Updated = FALSE;
			CComPtr<IDispatch> spFlashDisp;
			hr = spObject->get_object(&spFlashDisp);
			if (SUCCEEDED(hr) && spFlashDisp)
			{
				ElemInfo.pFlashDisp = spFlashDisp;
				log.LogString(LOG_INFO, "if (SUCCEEDED(hr) && spFlashDisp) Succeeded");
			}
			
			ElemInfo.pTagDisp = spTagDisp;
			m_FlashElementList.push_back(ElemInfo);
			bSuccess = true;
		}
	}
	
	if (g_pLog)
	{
		CString szMsg;
		szMsg.Format("RESULTS: bSuccess == %X, nCnt==%d", bSuccess, nCnt); 
		log.LogString(LOG_INFO, szMsg.GetBuffer());
	}

	return bSuccess;
}