首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EPM (增强保护模式)的IE工具栏

EPM (增强保护模式)的IE工具栏
EN

Stack Overflow用户
提问于 2013-07-11 11:05:58
回答 2查看 910关注 0票数 1

我正在为IE设计一个工具栏。我已经成功地编译了工具栏的32位64位版本,这两个版本都在IE9上正常工作。但是,当我在IE10 on Windows 8上尝试时,工具栏并没有加载。IE能够在中看到工具栏,并在那里启用32位和64位。但这不是装货。我甚至在DllMain方法中放置了一个警告框,但即使这样也不存在。在我的插件中,我添加了在IEInternals博客上描述的声明:

代码语言:javascript
复制
DEFINE_GUID(CATID_AppContainerCompatible, 0x59fb2056,0xd625,0x48d0,0xa9,0x44,0x1a,0x85,0xb5,0xab,0x26,0x40);

我还少了什么?

EN

回答 2

Stack Overflow用户

发布于 2013-07-12 03:16:04

DEFINE_GUID调用只是在代码中定义GUID值常量,实际上它并不是在用COM组件类别(存储在注册表中)注册对象。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms692551(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms694322(v=vs.85).aspx

您可以使用OLEView工具查看哪些对象被注册到不同的类别中。

另外,一定要将BHO的DLL放置在应用容器可读的文件夹中(例如\Program \文件夹的子文件夹)。如果没有这样做,您的DLL将不会被IE实例以增强的保护模式加载。

票数 1
EN

Stack Overflow用户

发布于 2013-12-12 04:38:06

你需要包括"IEPMapi.h“

IEMapi.h附带Windows Windows8.1SDK

然后需要DllRegisterServer调用的函数,所以当dll被regsvr32调用时,它会标记注册表HKEY_CLASS_ROOT下工具栏类-id下的comptabile类别。

代码语言:javascript
复制
    bool RegisterCLSIDInCategory(REFCLSID clsID)
   {
      CComPtr<ICatRegister> catRegister = NULL ;
      HRESULT hr = ::CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                              NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_ICatRegister,
                              (void**)&catRegister);
      if (SUCCEEDED(hr))
      {
         // Register this category as being "implemented" by
         // the class.
         CATID rgcatid[] ={ CATID_AppContainerCompatible};

         HRESULT hr2 = catRegister->RegisterClassImplCategories(clsID, 1, rgcatid);
         if (SUCCEEDED(hr2))
         {
            return true;
         }         
      }
      return false;
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17591740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档