旧版 

首页

影音盒子

酷录

酷抓

升级易

我的博文

关于

 

     刀锋下载
  • 简介
  • 免费下载  
  • 使用说明  
  • 常见问题
  •  
     总体说明 | 添加单个任务 | 添加批量任务 | 从文件中导入任务 | 自动化调用


    本页帮助内容适合软件开发者阅读。

    本软件提供了自动化接口供第三方软件调用以添加下载任务,类似于网际快车等下载软件,它也甚至可以在IE浏览器的右键菜单中被调用。不过由于本软件的优势不在于下载普通的网络文件,因为这些对于网际快车等软件已经做得很好了。所以本软件最有用的地方就是要被酷抓6等网址嗅探工具调用来添加下载任务。

    本自动化接口的ProgramID为URLDownloader.COMAddTask。每了实现方便,作者还提供了接口的tlb文件供开发工具导入。注意,由于软件的自动化接口是直接封装在EXE中的,必须首先直接运行一次以使得它可以被注册到目标机器上,所以为了能确保其在调用前被注册,最好先创建它的进程(不过软件中也作了处理,所有的自动化调用前都会自动创建进程进行注册,实际上可以不先创建进程)。下面介绍本软件唯一的自动化接口(作者给出的为C/C++描述,其它语言可类推):
    long AddUrls(VARIANT* varUrls);
    参数varUrls为一个二维的安全数组(SafeArray),其第一维有五个元素,分别为网址(URL)、用户代理(User-Agent)、引用(Referer)、Cookie及整个请求头。第二维就是多个下载任务了。
    返回值:如果返回S_OK(0),则表示调用正确,否则表示出错,目前返回出错代码有:ERROR_PROC_NOT_FOUND(127L,表示找不到刀锋下载的主窗口),ERROR_INVALID_PARAMETER(87L,表示传的参数错误)。当然为了调用不出问题,最好在调用的外围加入异常处理。
    下面给出作者使用VC写的调用的一个例子:
    // 为了确保自动化EXE能被注册,最好先直接运行EXE
    CString strExePath; // Blader.exe的全路径
    PROCESS_INFORMATION ProcessInfo;
    STARTUPINFO StartupInfo;
    ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
    ZeroMemory(&StartupInfo, sizeof(StartupInfo));
    StartupInfo.cb = sizeof(StartupInfo);
    if(CreateProcess(strExePath, NULL, NULL, NULL, FALSE, 0,
    NULL, NULL,&StartupInfo,&ProcessInfo))
    {
    WaitForInputIdle(ProcessInfo.hProcess,INFINITE);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
    }
    else
    {
    AfxMessageBox(_T("启动刀锋下载失败,请检查该文件是否存在!"));
    return;
    }
    // 通过自动化启动下载工具
    ICOMAddTaskPtr taskAdd; // 通过#import tlb文件得到的智能指针
    if(taskAdd.CreateInstance(_T("URLDownloader.COMAddTask")) != S_OK)
    {
    AfxMessageBox(_T("向刀锋下载添加下载任务失败!"));
    return;
    }
    // 创建二维SafeArray
    SAFEARRAYBOUND bounds [2];
    bounds[0].cElements = 5; // 一维,记录URL、User_Agent、Referer、Cookie、Header
    bounds[0].lLbound = 0;
    bounds[1].cElements = nSize; // 二维, nSize为任务数
    bounds[1].lLbound = 0;
    SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT, 2, bounds); // 创建二维数组
    if(psa == NULL)
    {
    AfxMessageBox(_T("创建参数表失败!"));
    return;
    }
    VARIANT varList;
    varList.vt = VT_BSTR;
    long ix[2] = {0};
    CString strURL, strAgent, strRefer, strCookie, strHeader; // 暂时没有处理User-Agent
    CReportCtrl& rc = GetReportCtrl();
    for(int i = 0; i < nSize; i ++)
    {
    strURL = rc.GetItemText(aItems[i], 2); // 从ListCtrl取数据
    strRefer = rc.GetItemText(aItems[i], 3);
    strCookie = rc.GetItemText(aItems[i], 4);
    strHeader = (LPCTSTR)rc.GetItemData(aItems[i]);
    if(!strURL.IsEmpty())
    {
    // 下面构造参数——二维SafeArray
    ix[1] = i;
    ix[0] = 0;
    varList.bstrVal = SysAllocString(T2OLE(strURL));
    SafeArrayPutElement(psa, ix, &varList);
    ix[0] ++;
    varList.bstrVal = SysAllocString(T2OLE(strAgent));
    SafeArrayPutElement(psa, ix, &varList);
    ix[0] ++;
    varList.bstrVal = SysAllocString(T2OLE(strRefer));
    SafeArrayPutElement(psa, ix, &varList);
    ix[0] ++;
    varList.bstrVal = SysAllocString(T2OLE(strCookie));
    SafeArrayPutElement(psa, ix, &varList);
    ix[0] ++;
    varList.bstrVal = SysAllocString(T2OLE(strHeader));
    SafeArrayPutElement(psa, ix, &varList);
    }
    }
    varList.vt = VT_ARRAY | VT_VARIANT | VT_BYREF;
    varList.pparray=&psa;
    if(taskAdd->AddUrls(&varList) != S_OK)
    {
    AfxMessageBox(_T("添加下载任务到刀锋下载失败!"));
    }
    SafeArrayDestroy(psa);


    版权所有 © 2003 - 2012 Hensence.com