前不久,有人在论坛上求一个能够自动完成网页文本采集的软件。具体功能是,当用户选择网页中的一段文本时,单击鼠标右键,则会在右键菜单中看到“保存为文本文件”的选项,这篇文章讲一讲我实现的这个小软件的技术及思想。
该软件涉及到的技术有:
1、IE编程,主要是如何将右键菜单嵌入到IE右键菜单里去。
2、COM(组件对象模型)编程。
3、VB脚本编程。
实现该软件的基本思想及流程:
1、向系统注册一个COM组件,该组件提供接口SaveText(BSTR str),SaveText接口能将str保存为指定路径下的文本文件。
2、修改注册表,将“保存为文本文件”选项添加到IE右键菜单中。
3、建立VB脚本,关联菜单选项与COM组件调用。
这样,用户在选择文本后能选择“保存为文本文件”,程序就能将选择的文本传入COM组件。
下面是实现上述三个步骤的细节:(开发环境:Visual C++ 6.0)
1、在VC里建立ATL工程,并为COM组件添加接口SaveText(BSTR str),该接口调用SaveText.dll里的SaveText函数(该函数弹出对话框,并将对话框中文本框里的内容保存为用户指定路径的文本文件),完成保存文本功能。
2、修改注册表,在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\子键下添加“保存为文本文件”子键,其下设立两个值,其中默认值为执行脚本的所在路径,Contexts值表示在IE中单击鼠标右键里何时显示该菜单选项(说细说明见http://support.microsoft.com/kb/q177241/)。
3、建立VB脚本的目的是为了让用户单击“保存为文本文件”选项时执行该脚本,然后脚本创建COM对象,完成保存文本文件功能,在网页中选择用户选中文本的脚本程序可以如下书定:
On Error Resume Next
set nc=CreateObject("SeizeText.Seize")
if err<>0 then
MsgBox("error..")
else
nc.CatchHtmlText(external.menuArguments.document.selection.createRange().text)
end if
在完成上述步骤后,网页文本采集功能就实现了。