用vc++对ie进行修改操作(2)
该函数的主要内容如下建立上下文菜单, lpSubKey, 0, ”“, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &phkResult,, ”我们自己的上下文菜单(&W)“, REG_SZ, keyValue,建立工具菜单, lpSubKey, 0, ”“, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&phkResult,, lpSubKey, 0, KEY_ALL_ACCESS,, ”CLSID“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),, ”MenuText“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),我们自己的测试程序, ”MenuStatusBar“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),, ”Exec“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),工具栏按钮, ”ButtonText“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),,, ”Icon“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),,, ”HotIcon“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),, ”Default Visible“, 0, REG_SZ, (const unsigned char *)((LPCSTR)type),代码中我们还用到了一个GetAppPath()函数,该函数将返回应用程序的路径,pathtemp,函数已经写好了,我们只要在程序适当的地方调用函数WriteReg()就可以了,例如在CTestView::PreCreateWindow()中。现在启动IE,你会发现IE中有三个地方已经有所不同了,如图4、图5、图6所示试试点击”MyTest“按钮或者”工具“菜单上的”MyTest“项看看,我们刚才编写的MyTest.exe是不是自动执行了?
那么上下文菜单怎样执行呢?从我们的程序中可以看出,我们是把它与一个。htm文件”MySelf.htm“相关联了,即点击上下文菜单中的”我们自己的上下文菜单“项,IE将会打开MYSelf.htm文件并执行其内容。
现在让我们回想使用网络蚂蚁的情形:右击一个文件的URL,选择”Down by NetAnt“上下文菜单项,IE就会打开网络蚂蚁并开始下载。那么这个功能是怎么实现的呢?
如果用过3721网址软件的话,它也会在IE的上下文菜单中添加自己的菜单”访问3721网站“,只要点击该菜单,就会打开浏览器,进入3721网站,这又是怎么实现的呢?
其实,两种功能都是通过那个htm文件来实现的,只是那个htm文件的内容不一样罢了。下面我们就来揭开这层神秘的面纱。我们先看看3721中文网址,它相对比较简单。实现点击上下文菜单并打开一个固定的主页地址是很简单的,如果你对HTML语言和Script稍有了解的话,阅读下面MySelf.Htm的代码就会非常轻松当我们点击”我们自己的上下文菜单“的时候,IE就会自动打开清华大学的主页,非常简单的几句语句就解决大问题。事实上确实如此,有些问题没有认清本质的时候我们会觉得它很神奇,我们一旦弄清楚了,就觉得很简单了,是不是?
下面要讲的是怎样实现网络蚂蚁的功能。不要误会,我们并不是要实现网络蚂蚁下载的功能,我们只是实现网络蚂蚁的启动功能,即通过点击”我们自己的上下文菜单“启动我们的Test程序而已。如果你对COM一点都不知道的话,最好先去看看这方面的书籍,下面的内容会简单一些。如果暂时不懂COM的话也没有关系,我会一步步讲的,只要按照我讲的步骤操作同样可以成功。
首先我们建立一个很简单的COM组件。打开VC++开发环境并新建一个工程AddIEFun,Location选择”C:AddIEFun“,工程的类型是MFC AppWizard(dll),完毕以后点击OK按钮。在”Step 1 of 1“对话框中选中Automation(自动化)选项,因为要让组件支持脚本访问的话,必须要实现Automation.其它的接收默认选项。点击Finish按钮,新工程就建立好了。
接下来的工作是添加一个COM对象类。虽然我们用AppWizard创建了应用框架,但是还没有真正的创建COM对象,按照下面的步骤为工程添加一个自动化对象选择菜单View->ClassWizard打开类向导。
点击Add Class按钮,选择New命令。
在弹出的New Class对话框的Name中输入类名CIEcontext,在Base class选择框中我们选择CCmdTarget,在对话框的下部我们选中Creatable by type ID,如图7所示。最后单击”OK“按钮,这样CIEcontext创建完成了,并且在类CIEcontext中实现了IIEcontext接口。
下面我们要做的就是添加一个方法真正来实现这个接口,让它来完成打开Test.exe的功能,步骤如下打开ClassWizard.
选中Automation选项页。
在Class name字段中选中CIEcontext.
单击Add Methord按钮,弹出Add Methord对话框。
在External Name中输入AddContext,选择Return type类型为void,因为我们不需要返回什么特别的值,也不需要参数,所以在参数列表中也不需要添加参数。
单击”OK“按钮,关闭Add Methord对话框。
关键的一步就是要实现AddContext方法。因为我们要在脚本中访问该方法,而且只访问该方法就可以了,所以要添加的代码极其简单--只有一句代码,就是打开我们的程序Test.Exe,代码如下,现在对这个方法进行一些说明。该方法调用了WinExec()函数,目的是运行我们自己的程序。可以看出,该API有两个参数:一个是程序的完整路径和文件名,另一个参数是打开程序的方式。不过要说明一点,以这种绝对路径打开程序的方式不是很科学,实际应用中,事先应该把程序的路径写入注册表,然后在程序中读取注册表中的信息。
我们的一个支持自动化的COM组件已经建成了,就这么简单。编译通过后,你会发现在工程的Debug目录下会产生两个特别的文件:AddIeFun.dll和AddIeFun.tlb,它们就是编译后产生的库文件。不过,要让用户能在程序中使用它们,首先必须对该组件进行注册。直接运行RegSvr32.Exe虽然简单,但是在VC++的集成环境中点击Tools菜单的Register Control更方便。注册成功的话,会弹出一个消息框,如图8所示现在,我们大部分任务已经完成了,剩下就是修改MySelf.htm文件,代码如下错误好了,现在你可以放心大胆的使用你的程序了!
- 上一篇:关于内存对齐[组图]
- 下一篇:VC 获取物理网卡的MAC地址