分享
 
 
 

Office2000下内部COM插件的编程实现(之一)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Office2000下内部COM插件的编程实现

翻译:徐景周

下载示例源码(http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=596)

简介

你也许曾在Office2000下的Word2000、Access2000、Excel2000、PowerPoint2000等软件中的工具条或菜单条资源中,看到一些其它软件加入的新的自定义工具条按钮或菜单条,当点击它们时,会有其不同的响应发生。下面,让我们也来实现这些功能,需要说明的是,在这里我们不用VB/VBA来实现它,而是用VC6中所带ATL(活动模板库)3.0来开发具有这种效果的Office2000内部COM插件。在Office2000中,不管是Word2000、Access2000、Excel120000、PowerPoint2000还是Outlook2000等,它们COM插件的编程方法及步骤都是极其相似的(除注册表中键值及导入相应类型库不同外)。

基础知识

一个Office2000下的内部COM插件必须实现一个_IDTExtensibility2派发接口,_IDTExtensibility2派发接口被定义在MSADDin Designer类型库(MSADDNDR.dll/MSADDNDR.tlb)中,通常位于<盘符>/Program Files/Common Files/Designer下。_IDTExtensibility2接口中必须实现下面五个接口涵数(一般只需编写OnConnection和OnDisconnection中代码),分别如下:

1. OnConnection: 装载插件到内存时处理(可以通过自动化在程序启动时自动装载插件)。

2. OnDisconnection: 从内存中缷载插件时处理。

3. OnAddinsUpdate: COM插件改变时处理。

4. OnStartupComplete: 当应用程序启动时插件刚装载完成时处理。

5. OnBeginShutdown: 当应用程序关闭时插件刚缷载完成时处理。

注册插件

只有在正确注册了相应应用程序的内部COM插件时,才能被其应用程序加载上。需要在注册表中创建以下键值:

HKEY_CURRENT_USER\Software\Microsoft\Office\<TheOfficeApp>\Addins\<ProgID>

其中,TheOfficeApp表示相应程序名,如:Word、Outlook等,ProgID表示内部COM插件程序的唯一标识符的字符串表示形式,如:Outlook2000Addin.Addin等。

ProgID键值下主要创建以下四个键值:

1. FriendlyName: 字符串类型,插件的名称,将在相应程序的COM加载对话框中看到。

2. Description: 字符串类型,插件的描述信息。

3. LoadBehavior: DWORD类型,决定插件将以什么形式被装载。当其值为0x03时,为应用程序装载时被自动装载(一般使用此值)、当其值为0x08时,为用户控制激活装载。

4. CommandLineSafe: DWORD类型,命令行方式,可以设置为0x01(真)或0x00(假)。

其它键值的完整描述可参看最新MSDN。

具体实现

下面,我们将以创建一个Outlook2000的内部COM插件为示例,向你一步步的展现如何最小化的创建一个Office2000的内部插件的全过程。效果图如下所示:

图一

打开VC6.0,在新建工程中选中ATL COM Appwizard,在右侧工程名中输入OutlAddin,点击下一步,接受默认选项Dynamic Link Library(DLL)不变,可以选中下面的Allow merging of proxy-stub code(允许合并代理/占位)复选框选项,点击Finish(完成)按钮完成工程创建。

接着,选取菜单Insert->New ATL Objec项,在弹出的ATL对象向导对话框中选中相应Objects对应右侧的Simple Object选项,点击下一步,在弹出的对话框中ShortName中输入OutlookAddin,如果需要的话,还可以在Attributes(属性页)中选中Support ISupportErrorInfo复选框选项,点OK完成插入ATL对象。

接着通过导入类型库来实现_IDTExtensibility2接口,编释好上面所建工程后,在ClassView中的COutlookAddin类上点鼠标右键,在弹出的右键菜单中选Implement Interface项。在弹出的实现接口对话框中点击Add Typelib,在弹出的

Browse Type Libraries对话框中,向下滚动选取Microsoft Add-in Designer(1.0)子项,点OK按钮。在弹出的接口列表对话框中选中_IDTExtensibility2接口,点OK按钮完成导入。系统会自动为你生成空的上面所提到的五个所需接口涵数。

接着注册编译好的插件,在FileView->Resource Files中,打开OutlookAddin.rgs注册文件,在该文件的最下面加入下面新的内部插件注册码:

// 新增Outlook2k内部插件注册键值

HKCU

{

Software

{

Microsoft

{

Office

{

Outlook

{

Addins

{

'OutlAddin.OutlookAddin'

{

val FriendlyName = s 'Outlook2000插件'

val Description = s '使用ATL开发的Outlook2000的插件'

val LoadBehavior = d '00000003'

val CommandLineSafe = d '00000000'

}

}

}

}

}

}

}

编译此工程,如果注册正确的话,将可以在Outlook中COM加载项的插件对话框中看到它的相应名称。在Office2000中加载或卸载COM插件,一般可以按下面步骤进行:

1. 如果已经将“COM 加载项”命令添加到了“工具”菜单,请跳到第 6 步。

2. 单击“工具”菜单中的“自定义”命令,然后单击“命令”选项卡。

3. 在“类别”框中,选择“工具”。

4. 将“COM 加载项”从“命令”框拖动到“工具”菜单。当“工具”菜单显示菜单命令时,将鼠标指针指向希望“COM 加载项”命令出现在菜单上的位置,然后释放鼠标按钮。

5. 单击“关闭”按钮。

6. 单击“工具”菜单中的“COM 加载项”命令,并执行下列操作之一:

l 要添加加载项,请选中“可使用的加载项”列表中加载项名称旁边的复选框。如果所需的加载项不在“可使用的加载项”列表中,请单击“添加”按钮,找到要添加的加载项,然后单击“确定”按钮。

l 要从内存中卸载加载项,但希望在列表中保持其名称,请清除加载项名称旁边的复选框。

若要从列表中删除加载项的同时,将其从注册表文件中注册的加载项列表中删除,请选择加载项的名称,然后单击“删除”按钮。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有