ImageProcessBHO.h
上传用户:pass2008
上传日期:2021-07-05
资源大小:3299k
文件大小:3k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. // ImageProcessBHO.h : CImageProcessBHO 的声明
  2. #pragma once
  3. #include "resource.h"       // 主符号
  4. #include "ImageProcess.h"
  5. #include <shlguid.h>
  6. #include <exdispid.h>
  7. #include <mshtml.h>
  8. #include "ImgProcUnit.h"
  9. #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
  10. #error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"
  11. #endif
  12. // CImageProcessBHO
  13. class ATL_NO_VTABLE CImageProcessBHO :
  14. public CComObjectRootEx<CComSingleThreadModel>,
  15. public CComCoClass<CImageProcessBHO, &CLSID_ImageProcessBHO>,
  16. public IObjectWithSiteImpl<CImageProcessBHO>,
  17. public IDispatchImpl<IImageProcessBHO, &IID_IImageProcessBHO, &LIBID_ImageProcessLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
  18. public IDispEventImpl<1, CImageProcessBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
  19. {
  20. public:
  21. CImageProcessBHO()
  22. {
  23. m_bNavigatedToLocalHTML = FALSE;
  24. //m_bInputNewURL = FALSE;
  25. }
  26. DECLARE_REGISTRY_RESOURCEID(IDR_IMAGEPROCESSBHO)
  27. DECLARE_NOT_AGGREGATABLE(CImageProcessBHO)
  28. BEGIN_COM_MAP(CImageProcessBHO)
  29. COM_INTERFACE_ENTRY(IImageProcessBHO)
  30. COM_INTERFACE_ENTRY(IDispatch)
  31. COM_INTERFACE_ENTRY(IObjectWithSite)
  32. END_COM_MAP()
  33. BEGIN_SINK_MAP(CImageProcessBHO)
  34. SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
  35. END_SINK_MAP()
  36. DECLARE_PROTECT_FINAL_CONSTRUCT()
  37. HRESULT FinalConstruct()
  38. {
  39. return S_OK;
  40. }
  41. void FinalRelease()
  42. {
  43. //退出前清理工作
  44. for (int i=0; i<imageNames.GetCount(); i++)
  45. {
  46. ::DeleteFile(imageNames.GetAt(i));
  47. }
  48. ::DeleteFile(localStockedPath);
  49. }
  50. public:
  51. STDMETHOD(SetSite)(IUnknown* pUnkSite);
  52. void STDMETHODCALLTYPE OnDocumentComplete(IDispatch* pDisp, VARIANT* pvarURL);
  53. private:
  54. CComPtr<IWebBrowser2> m_spWebBrowser;
  55. BOOL m_fAdvised;
  56. CStringArray imageOuterHTML;
  57. CStringArray imageLinks; //图像URL集合
  58. CString predomainURL; //前次域名URL
  59. CString domainURL; //域名URL
  60. CStringArray imageNames; //处理后的图片名集合
  61. BOOL m_bNavigatedToLocalHTML;
  62. //BOOL m_bInputNewURL;
  63. CString localStockedPath; //本地保存的HTML文件路径,C盘根目录下
  64. void RetrieveImagesLinks(IHTMLDocument2* pDocument);
  65. void JointImagesURL();
  66. void ModifyOriHTMLPicLinks(LPCTSTR htmlPath);
  67. CString GetImgSrc(CString& linkInfo, CString& strImgSrc);
  68. BOOL simpleMatch(CString& imgSrc, CString& strHttp); //匹配成功返回TRUE,失败返回FALSE
  69. void synFullURLPath(int index, CString& subStrLink);
  70. BOOL elimInvalidPrefixSymbols(CString& strPrefix);
  71. //void replaceIExplorerImgOuterHTML(CString& strOtHTML, LPCTSTR imgPath);
  72. };
  73. OBJECT_ENTRY_AUTO(__uuidof(ImageProcessBHO), CImageProcessBHO)