为金山虚拟光驱扩展浏览器上下文菜单功能
http://tech.ddvip.com 2007年10月31日 社区交流
内容摘要:本文详述了如何为金山虚拟光驱软件进行浏览器上下文菜单扩展.通过扩展,你可以直接通过鼠标右击虚拟光驱盘符来插入或者弹出虚拟光盘文件,也可以通过右击虚拟光盘文件(*.ISO)来将它直接插入某个虚拟光盘内。
选择“Insert”菜单的“New Class”命令,向当前工程添加一个新类。在类类型里选择通用类。类名为“CExtend”。打开类的头文件,添加几个头文件并修改类的继承列表:
#include "resource.h" // main symbols
#include <comdef.h>
#include <shlobj.h>
#include "KVDExtend.h"
class ATL_NO_VTABLE CExtend :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CExtend, &CLSID_KVDExtend>,
public IShellExtInit,
public IContextMenu
{
COM对象需要在系统中注册,Shell扩展也需要注册。这个可以通过创建自注册脚本来让ATL自动完成。新建一个文本文件名称为“KDVExtend.rgs”,将该文件添加到工程内。文件内容如下:
HKCR
{
Lounger.KVDExtend.1 = s 'KVDExtend Class'
{
CLSID = s '{23773FFD-5911-4f9a-AB73-13CED852F297}'
}
Lounger.KVDExtend = s 'KVDExtend Class'
{
CLSID = s '{23773FFD-5911-4f9a-AB73-13CED852F297}'
CurVer = s 'Lounger.KVDExtend.1'
}
NoRemove CLSID
{
ForceRemove {23773FFD-5911-4f9a-AB73-13CED852F297} = s 'KVDExtend Class'
{
ProgID = s 'Lounger.KVDExtend.1'
VersionIndependentProgID = s 'Lounger.KVDExtend'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{54B2CC03-EB11-4C15-B68B-869FCC15A238}'
}
}
NoRemove Drive
{
NoRemove shellex
{
NoRemove ContextMenuHandlers
{
Lounger.KVDExtend = s '{23773FFD-5911-4f9a-AB73-13CED852F297}'
}
}
}
NoRemove '*.iso' = s 'ISOFile'
NoRemove ISOFile
{
NoRemove shellex
{
NoRemove ContextMenuHandlers
{
Lounger.KVDExtend = s '{23773FFD-5911-4f9a-AB73-13CED852F297}'
}
}
}
}
HKLM
{
NoRemove SoftWare
{
NoRemove Microsoft
{
NoRemove Windows
{
NoRemove CurrentVersion
{
NoRemove 'Shell Extensions'
{
NoRemove Approved
{
val {23773FFD-5911-4f9a-AB73-13CED852F297} = s '金山虚拟光驱Shell扩展'
}
}
}
}
}
}
}
责编:豆豆技术应用