webbroswer屏蔽Windows2003下“增强安全设置”窗口的方法

来源:互联网 发布:最好看的拳击电影知乎 编辑:程序博客网 时间:2024/05/16 00:30

    在windows2003下,一般情况下当我们用IE访问一个站点的时候会弹出“增强的安全设置”的对话框,很让人讨厌,单我们自己的webbroswer访问的时候也会有这种情况,有些让我们显得很被动,有什么方法能屏蔽它呢?我给大家做个示范吧。

    1 在引用webbroswer的窗口类中继承IInternetSecurityManager和IServiceProvider接口,具体代码如参考我的前一篇博文。
    2 重载以下方法:SetSecuritySite,GetSecuritySite,MapUrlToZone,GetSecurityId,ProcessUrlAction,QueryCustomPolicy,SetZoneMapping,GetZoneMappings,具体代码可参考
  virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
  /* [unique][in] */ IInternetSecurityMgrSite *pSite) { return INET_E_DEFAULT_ACTION; }

  virtual HRESULT STDMETHODCALLTYPE GetSecuritySite(
  /* [out] */ IInternetSecurityMgrSite **ppSite) { return INET_E_DEFAULT_ACTION; }

  virtual HRESULT STDMETHODCALLTYPE MapUrlToZone(
  /* [in] */ LPCWSTR pwszUrl,
  /* [out] */ DWORD *pdwZone,
  /* [in] */ DWORD dwFlags) { *pdwZone = 2; return S_OK; }

  virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
  /* [in] */ LPCWSTR pwszUrl,
  /* [size_is][out] */ BYTE *pbSecurityId,
  /* [out][in] */ DWORD *pcbSecurityId,
  /* [in] */ DWORD_PTR dwReserved) {  return INET_E_DEFAULT_ACTION; }

  virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
  /* [in] */ LPCWSTR pwszUrl,
  /* [in] */ DWORD dwAction,
  /* [size_is][out] */ BYTE *pPolicy,
  /* [in] */ DWORD cbPolicy,
  /* [in] */ BYTE *pContext,
  /* [in] */ DWORD cbContext,
  /* [in] */ DWORD dwFlags,
  /* [in] */ DWORD dwReserved) { return URLPOLICY_ALLOW; }

  virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
  /* [in] */ LPCWSTR pwszUrl,
  /* [in] */ REFGUID guidKey,
  /* [size_is][size_is][out] */ BYTE **ppPolicy,
  /* [out] */ DWORD *pcbPolicy,
  /* [in] */ BYTE *pContext,
  /* [in] */ DWORD cbContext,
  /* [in] */ DWORD dwReserved) {  return INET_E_DEFAULT_ACTION; }

  virtual HRESULT STDMETHODCALLTYPE SetZoneMapping(
  /* [in] */ DWORD dwZone,
  /* [in] */ LPCWSTR lpszPattern,
  /* [in] */ DWORD dwFlags) { return INET_E_DEFAULT_ACTION; }

  virtual HRESULT STDMETHODCALLTYPE GetZoneMappings(
  /* [in] */ DWORD dwZone,
  /* [out] */ IEnumString **ppenumString,
  /* [in] */ DWORD dwFlags) { return INET_E_DEFAULT_ACTION; }
     3 接着在QueryInterface方法中处加上如下代码:
  if (IsEqualIID(riid,IID_IServiceProvider))
  {
   *ppv = static_cast<IServiceProvider*>(this);
   return S_OK;
  }
     4 最后在QueryService方法中加入以下实现即可:
  if (IsEqualIID(riid, IID_IInternetSecurityManager))
  {
   *ppvObject = static_cast<IInternetSecurityManager*>(this);
   return S_OK;
  }
以上四步即可完全屏蔽那可恶的窗口了,具体原理请参见MSDN,本人不多说。

原创粉丝点击