Blader
  • Introduction
  • Free Download  
  • How to Use  
  • FAQ
  •  
     Usage | Add Single Task | Add Batch Tasks | Import Task From File | Automation Interface


    This page is for developers.

    Blader provides automation interface for third-party invoke. Like Flashget, it can even be invoked from IE browser's contexted menu. However, Blader is not just for ordinary network resources download. Ordinary resources download has been well realized by other download tools. Blader's powerful ability exposes when being used together with CooJah.

    The ProgramID of Blader automation interface is URLDownloader.COMAddTask. For development convenience, a TLB file is provided in Blader package. It can be imported by development tools. Now I will show you how to invoke the only interface implemented by Blader. It's in C/C++, other it's the same for other languages.
    long AddUrls(VARIANT* varUrls);
    The varUrls parameter is a 2 Dim Safe Array. There are 5 elements for Dim 1. They are URL, User-Agent, Referer, Cookie and whole Reuest Header. Dim 2 is for multi task.
    Return value. S_OK(0) is for successful inovke and other return values are for failure. At present, the error values including  ERROR_PROC_NOT_FOUND(127L) for cannot find main window of Blader, ERROR_INVALID_PARAMETER(87L) for invalid input parameters). For stability, you'd better add exception handling outside.
    Following is an example in Viusal C++:


    // To ensure automation interface to be registered, run it first
    CString strExePath;    // Full path of 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("Startup failed, please make sure its existence."));
    return;
    }


    // Startup Blader by automation interface
    ICOMAddTaskPtr taskAdd; // Smart pointer got by import tlb file
    if(taskAdd.CreateInstance(_T("URLDownloader.COMAddTask")) != S_OK)
    {
    AfxMessageBox(_T("Add task to Blader failed!"));
    return;
    }
    // Create 2 Dim SafeArray
    SAFEARRAYBOUND bounds [2];
    bounds[0].cElements = 5; // Dim 1, URL, User Agent, Referer, Cookie, Header
    bounds[0].lLbound = 0;
    bounds[1].cElements = nSize; // Dim 2, nSize means number of tasks
    bounds[1].lLbound = 0;
    SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT, 2, bounds); // Create 2 dim safearray
    if(psa == NULL)
    {
    AfxMessageBox(_T("Create safe array failed!"));
    return;
    }
    VARIANT varList;
    varList.vt = VT_BSTR;
    long ix[2] = {0};
    CString strURL, strAgent, strRefer, strCookie, strHeader; // User-Agent is not used at present
    CReportCtrl& rc = GetReportCtrl();
    for(int i = 0; i < nSize; i ++)
    {
    strURL = rc.GetItemText(aItems[i], 2);            // Get data from listctrl
    strRefer = rc.GetItemText(aItems[i], 3);
    strCookie = rc.GetItemText(aItems[i], 4);
    strHeader = (LPCTSTR)rc.GetItemData(aItems[i]);
    if(!strURL.IsEmpty())
    {
    // Will construct patameters, a 2 Dim 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("Add task to Blader failed!"));
    }
    SafeArrayDestroy(psa);

     


    Copyright © 2003 - 2012 Hensence.com
    All Rights Reserved