为金山虚拟光驱扩展浏览器上下文菜单功能

http://tech.ddvip.com   2007年10月31日    社区交流

内容摘要:本文详述了如何为金山虚拟光驱软件进行浏览器上下文菜单扩展.通过扩展,你可以直接通过鼠标右击虚拟光驱盘符来插入或者弹出虚拟光盘文件,也可以通过右击虚拟光盘文件(*.ISO)来将它直接插入某个虚拟光盘内。

  注册脚本有点长,但这些都是必需的。我们需要将该文件包含到工程的资源内,以便自注册时代码从资源中读取它。选择“Insert”菜单的“Resource”命令。在插入资源对话框,选择“Import“命令。将“KDVExtend.rgs”导入,资源类型为“REGISTRY”,资源ID为“IDR_KVDEXTEND”。如下图所示:

  回到类Cextend的头文件,在类定义内部添加如下的宏:

  // 定义自注册脚本资源
  DECLARE_REGISTRY_RESOURCEID(IDR_KVDEXTEND)
  DECLARE_PROTECT_FINAL_CONSTRUCT()
  // 接口映射表
  BEGIN_COM_MAP(CExtend)
    COM_INTERFACE_ENTRY(IShellExtInit)
    COM_INTERFACE_ENTRY(IContextMenu)
  END_COM_MAP()

  打开KDVExtend.cpp文件,找到“BEGIN_OBJECT_MAP”和“END_OBJECT_MAP”这一对宏,在这对宏之间定义我们的COM对象:

BEGIN_OBJECT_MAP(ObjectMap)
  OBJECT_ENTRY(CLSID_KVDExtend, CExtend)
END_OBJECT_MAP()

  另外不要忘记要在文件前面添加对类CExtend的头文件的包含:

  #include "Extend.h"

  4.完成程序功能

  通过上面的步骤,程序的基本框架和ATL,COM相关的代码已经基本完成。下面将主要精力放在实现程序的功能上来。

  1)我们将对动态链接库文件kscdrush.dll的调试得出的相关函数和数据结构的定义加入到类Cextend的说明中。

  2)添加两个函数的覆盖版本:FinalConstruct和FinalRelease,这两个函数主要实现类的初始化和类删除前的清理工作。在ATL工程中我们要注意,因为程序将不链接C运行库,类的构造和析构函数可能将不会被调用。ATL为我们提供了这两个虚函数来代替类的构造和析构函数。

责编:豆豆技术应用

正在加载评论...