用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.1 KiB

5 months ago
#pragma once
#include <control/SActiveX.h>
#include <ExDisp.h>
#include <ExDispid.h>
namespace SOUI
{
struct IWebEvent
{
virtual void BeforeNavigate2( IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel ){}
virtual void NavigateError(IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel){}
virtual void NavigateComplete2(IDispatch *pDisp,VARIANT *&url){}
virtual void ProgressChange(LONG nProgress, LONG nProgressMax){}
virtual void CommandStateChange(long Command,VARIANT_BOOL Enable){}
virtual void DocumentComplete(IDispatch *pDisp, VARIANT* &url){}
virtual void StatusTextChange(IDispatch *pDisp, VARIANT* &url){}
};
class SIECtrlEvtDispatch : public IDispatch
{
public:
SIECtrlEvtDispatch(IWebEvent *pEventHandler):m_pEventHandler(pEventHandler),m_cRef(1)
{
}
void SetEventHandler(IWebEvent *pEventHandler)
{
m_pEventHandler=pEventHandler;
}
public:// IUnknown
STDMETHOD_(ULONG,AddRef)()
{
return ++m_cRef;
}
STDMETHOD_(ULONG,Release)()
{
return --m_cRef;
}
STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObject)
{
if(IsEqualGUID(riid,__uuidof(IUnknown))
|| IsEqualGUID(riid,__uuidof(IDispatch)))
{
*ppvObject=this;
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
public: //IDispatch
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
/* [out] */ UINT *pctinfo){ return E_NOTIMPL;}
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo){ return E_NOTIMPL;}
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId){ return E_NOTIMPL;}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
protected:
IWebEvent *m_pEventHandler;
ULONG m_cRef;
};
class SIECtrl : public SActiveX, public IMessageFilter
{
SOUI_CLASS_NAME(SIECtrl, L"iectrl")
public:
SIECtrl(void);
~SIECtrl(void);
IWebBrowser2 * GetIEObject(){return m_pIE;}
SIECtrlEvtDispatch * GetEventDispatch(){return &m_eventDispatch;}
BOOL Navigate(const SStringW & strUrl);
protected:
virtual void OnAxActivate(IUnknown *pUnknwn);
virtual BOOL PreTranslateMessage(MSG* pMsg);
int OnCreate(LPVOID);
void OnDestroy();
SOUI_MSG_MAP_BEGIN()
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
SOUI_MSG_MAP_END()
protected:
HRESULT RegisterEventHandler(BOOL inAdvise );
SOUI_ATTRS_BEGIN()
ATTR_STRINGW(L"url",m_strUrl,FALSE)
ATTR_INT(L"disableScrollbar",m_bDisableScrollbar,FALSE)
ATTR_INT(L"disable3DBorder",m_bDisable3DBorder,FALSE)
ATTR_INT(L"disableContextMenu",m_bDisableContextMenu,FALSE)
ATTR_INT(L"disableTextSelect",m_bDisableTextSelect,FALSE)
SOUI_ATTRS_END()
SStringW m_strUrl;
DWORD m_dwCookie;
SIECtrlEvtDispatch m_eventDispatch;
SComQIPtr<IWebBrowser2> m_pIE;
BOOL m_bDisableScrollbar;
BOOL m_bDisable3DBorder;
BOOL m_bDisableContextMenu;
BOOL m_bDisableTextSelect;
HWND m_hIEWnd;
};
}