迅雷的可视化下载
来源:互联网 发布:矩阵论教程张绍飞答案 编辑:程序博客网 时间:2024/06/10 18:07
最近用迅雷,右键选择“使用迅雷下载全部链接”,会有一个可视化框方式进行下载的选择框:
点击“是”之后,就会进行像qq截图的区域选择。迅雷可以将这个区域里面的链接提取出来,然后全部下载下来。
这种方式确实比较有用,我比较关心这是如何实现的?
在注册表“HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt/使用迅雷下载全部链接”下面,显示处理“使用迅雷下载全部链接”,的url是e:/Program Files/Thunder Network/Thunder/Program/GetAllUrl.htm,文件内容如下:
<script language="VBScript">
Sub OnContextMenu()
set ThunderAgent = CreateObject("ThunderAgent.Agent.1")
If ThunderAgent.ConfirmRectMode = 0 Then
set links = external.menuArguments.document.links
set images = external.menuArguments.document.images
link_count = links.length
image_count = images.length
strDownloadPage = external.menuArguments.document.url
set theDownloadPage = external.menuArguments.document.getElementById("thunder_down_pageurl")
if TypeName(theDownloadPage) <> "Nothing" then
strDownloadPage = theDownloadPage.value
end if
strStatPage = ""
set theStatPage = external.menuArguments.document.getElementById("thunder_stat_pageurl")
if TypeName(theStatPage) <> "Nothing" then
strStatPage = theStatPage.value
end if
if strStatPage <> "" then
for i = 0 to link_count-1
call ThunderAgent.AddTask4(links(i).href, "", "", links(i).innerText, strDownloadPage, -1, 0, -1, external.menuArguments.document.cookie, "", strStatPage)
next
for i = 0 to image_count-1
call ThunderAgent.AddTask4(images(i).src, "", "", images(i).innerText, strDownloadPage, -1, 0, -1, external.menuArguments.document.cookie, "", strStatPage)
next
else
for i = 0 to link_count-1
call ThunderAgent.AddTask4(links(i).href, "", "", links(i).innerText, strDownloadPage, -1, 0, -1, external.menuArguments.document.cookie, "", "")
next
for i = 0 to image_count-1
call ThunderAgent.AddTask4(images(i).src, "", "", images(i).innerText, strDownloadPage, -1, 0, -1, external.menuArguments.document.cookie, "", "")
next
end if
call ThunderAgent.CommitTasks2(1)
Else
ThunderAgent.AddTaskInRect()
End If
set ThunderAgent = nothing
end sub
call OnContextMenu()
</script>
通过set ThunderAgent = CreateObject("ThunderAgent.Agent.1") ,我们知道这个脚本是调用activex控制来和迅雷主程序打交道的。ThunderAgent.Agent.1是ProgID,通过查注册表HKEY_CLASSES_ROOT/ThunderAgent.Agent.1可以知道其对应的CLSID为{485463B7-8FB2-4B3B-B29B-8B919B0EACCE}。然后到HKEY_CLASSES_ROOT/CLSID/{485463B7-8FB2-4B3B-B29B-8B919B0EACCE}/InprocServer32下面我们可以知道这个activex对应的dll为e:/Program Files/Thunder Network/Thunder/ComDlls/ThunderAgent5.9.23.1488.dll。然后我们通过vs提供的oleview.exe来查看这个dll的接口信息(typelib),其实就是解析dll的typelib资源段。
getAllurl.htm用到的方法有ConfirmRectMode,AddTask4,CommitTasks2和AddTaskInRect。ConfirmRectMode的作用就是弹出是否用可视化下载的对话框;AddTask4的作用是将链接加入列表(传入了cookie:external.menuArguments.document.cookie,这也是为什么迅雷可以下载需要登录的连接的原因);CommitTasks2的作用是让迅雷开始下载;AddTaskInRect的作用是进入可视化下载界面。
如果用户选择的是非可视化下载,通过external.menuArguments.document.links和external.menuArguments.document.images 就可以拿到当前页面的所有链接和图片地址。external的接口可以看http://msdn.microsoft.com/en-us/library/ms535246(v=VS.85).aspx。
那接下来的关键就是AddTaskInRect方法的实现了。vckbase上有一篇文章《采集网页选定部分全攻略》,介绍了如何获取选定部分文字和图片,我估计迅雷的实现跟这个差不多。
参考链接:
http://www.cnblogs.com/waxdoll/archive/2005/12/23/303470.html
http://blog.csdn.net/xushiweizh/archive/2007/04/26/1585137.aspx
http://topic.csdn.net/t/20060921/16/5038787.html
http://zhidao.baidu.com/question/11153472
http://www.vbaccelerator.com/progid.htm
http://forums.devx.com/archive/index.php/t-90027.html
http://www.codeproject.com/KB/aspnet/externalmenuArgument.aspx
- 迅雷的可视化下载
- 迅雷下载背后的秘密
- 迅雷是怎么下载的
- 迅雷叫多媒体下载的原因
- web迅雷下载显示不了的解决办法
- Ubuntu 安装的迅雷下载软件
- 修改迅雷的最大下载任务数
- 提高迅雷下载速度的方法
- 提高迅雷下载速度的方法
- 修改迅雷下载链接的方法。
- 离线下载,腾讯插入迅雷的利刃?
- iTunes 上的文件用迅雷下载
- 迅雷下载androidsdk的各种版本
- 迅雷下载文件名为download的解决办法
- 解决迅雷下载会卡的问题
- Linux类似迅雷的下载利器uGet
- mac 迅雷下载后的文件地址
- 百度云下载转化为迅雷下载的解决办法
- linux-2.6.32 编译问题(ld: /ubuntu/omnibook/sections.lds: No such file: No such file or directory )
- 环境变量的保存与恢复
- 无人值守网络安装Linux
- SCSI的Command Descriptor Block (CDB)格式
- 重新夯实基础,the c programingn language 再读笔记
- 迅雷的可视化下载
- export
- 这些题目你都还会做吗?
- 一张土耳其海报
- c# ftp上传下载
- 最近的感想
- UML符号
- 09年.net面试题
- 没事写了个函数式计算器。。不过有点脑残。。