原文地址:http://www.cnblogs.com/uu102/archive/2012/10/12/2720572.html
在.net里关于用Http下载文件,有HttpWebRequest实在是简单。通常用这个组建可以轻松为自己量身定做一个类似于迅雷的下载软件,只要你舍得花这个时间。当然,你还可以从socket方面入手,因为那个比用HTTP实现更底层,操作起来更细腻。但我们现在要说的与那无关,迅雷电驴云云,这些下载软件实在是太方便了,以至于我们看起来毫无写这方面软件的必要了。但是,这方面的资料还是必须掌握一点,在很多方面都会用得着。
当然还没说到正题,先说下实现步骤:1.监视剪切板,判断是否含有可以供下载的链接。2.建立下载任务,实时记录下载进度。 3.进度条显示进度。
先说下迅雷的下载格式:
thunder://QUFodHRwOi8veGlhemFpLnpvbC5jb20uY24vZG93bi5waHA/c29mdGlkPTExNDkyOSZzdWJjYXRpZD0zNDUmc2l0ZT0xMFpa
thunder://后面一连串的字符串是base64加密而成,因此,我们在下载迅雷协议格式的文件时,必须先解码成Unicode文本。
AAhttp://xiazai.zol.com.cn/down.php?softid=114929&subcatid=345&site=10ZZ
去掉 “AA” “ZZ”就是地址了。
using System.IO;//引入输入输出功能 using System.Net;//网络请求 using System.Text.RegularExpressions;//用于正则表达式字符串处理 using System.Runtime.InteropServices;//引入WinAPI功能函数 using System.Threading;//处理线程
准备一下功能函数
1.加载已经存在的INI配置文件
/// <summary> /// 为INI文件中指定的节点取得字符串 /// </summary> /// <param name="lpAppName">欲在其中查找关键字的节点名称</param> /// <param name="lpKeyName">欲获取的项名</param> /// <param name="lpDefault">指定的项没有找到时返回的默认值</param> /// <param name="lpReturnedString">指定一个字串缓冲区,长度至少为nSize</param> /// <param name="nSize">指定装载到lpReturnedString缓冲区的最大字符数量</param> /// <param name="lpFileName">INI文件名</param> /// <returns>复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符</returns> [DllImport("kernel32")] public static extern int GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); #endregion