IMAGE DOWNLOADER 1.0
Image Downloader was shut down on December 2008, after 5 years of operation and hundreds of copies sold. |
I wrote Image Downloader 1.0 in 2002 for personal purposes: I needed a program for helping me download a large number of JPEG images from several internet sites without too much hassle. The features of Image Downloader and the technology behind it are definitely unique and are the result of several weeks of dedicated research. Image Downloader has won several awards from specialized download sites around the web.
Image Downloader extends Internet Explorer for allowing to select images and thumbnails from an HTML page as one is used doing with files in a Windows Explorer window, for later or immediate download. In the screenshot above, you can see a selection operation as it happens: the user is navigating the web, finds one or more interesting images and then clicks the middle-mouse button selecting the images or thumbnails of interest: a yellow marker appears on the upper-left corner of each selected image (if the selection extends over the borders of the current Internet Explorer window, the HTML frame scrolls automatically in the direction of the cursor). The unique Image Downloader selector is able to deal with html anchors, maps and frames, JavaScript links and "Standards-Compliant" html pages. After the selection operation in Internet Explorer, the images can be actually downloaded pressing a button in the Image Downloader toolbar or in the Internet Explorer context menu:
FEATURES
|
Image Downloader is the only program that allows you to select one or more thumbnails, links or pictures from an Internet Explorer page and then download the selected images later. Pressing tipically the middle-mouse-button, when normally navigating in Internet Explorer, you can perform a selection of thumbnails or images and, according to the action chosen, the program will store the links to the selected items on disk or will save and/or download the images immediately. |
|
|
Image Downloader allows to filter the types of links that can be selected from the currently viewed page. |
|
|
Image Downloader is able to deal with Html Anchors, Maps and Frames, JavaScript links and "Standards-Compliant" Html Pages. |
|
|
The "Hot Rectangle" feature of the program allows you to automate the download of images from a predefined portion of a set of Html Pages, in an automatic manner. |
|
|
Image Downloader creates and operates only on standard Internet Explorer Shortcut files (*.URL), for maximum integration and compatibility. |
INTRODUCTION
Image Downloader is implemented as an Internet Explorer Extension (i.e. "Browser Helper Object") written in C++ with ATL/WTL and MFC. I have implemented several unique solutions and features in this program that you will not find in any other similar product: I will discuss some of those features later. The Image Downloader dedicated site is at this address: from it, you can take the Guided Tour or buy the full-featured program in a completely automated purchase procedure written with ASP.NET in C#.
SCREENSHOTS AND CONSIDERATIONS
For Image Downloader, I have implemented a completely dedicated server-side system for issuing evaluation and purchase keys. Immediately after download and installation, the program shows the dialog above in order to register the evaluation version of the program. After having typed in the personal informations of the user (name, company and email) the program requests to the Image Downloader server to issue an evaluation key for that user. At the client side, the query takes the form of a "URLDownloadToCacheFile" (proxy/firewall friendly) request to an ASP.NET page. The server-side implementation stores the user details in a SQL Server table and then calculates an highly encrypted 26-digits alphanumeric key that is emailed to the user. Then the user, upon receiving the mail, can enter in the same window above (previously used for the registration) the activation code so generated. Then the program connects again to the server and asks whether the activation code typed in by the user was actually generated by it (all the issued keys are stored in a SQL Server table) and so whether the key has to be considered valid. If everything goes ok, the program is unblocked and the evaluation period begins.
When the program is bought, the purchase system of the used e-commerce server talks through a private and authenticated interface to my ASP.NET server implementation communicating the details of the purchase, including the email address of the final user. At this point, the server-side implementation computes a new key (that has the same format of the evaluation key previously described) that is emailed to the final user in order to remove the evaluation period constraint and to enable the crippled features.
The "Hot Rectangle" feature allows to define portions of one or more HTML pages that contain images of interest. When downloading, the program will consider and download only those images that are comprised in the specified rectangle.
As you can see in the screenshot, the Hot Rectangle area can be defined in the context of a resolution-reduced version on an Internet Explorer page. This nice effect can be achieved through a method I have researched and implemented just for Image Downloader. Specifically, what you need to do is to make a WebBrowser control draw into a dedicated device context and then to "StretchBlt" from that device context to the target DC. This can be achieved simply calling the IViewObject::Draw method on the control itself (incidentally, you may want to create the WebBrowser control itself omitting the WS_VISIBLE style, thus causing the control to be hidden). This is the code snippet from the Image Downloader project that actually handles this task:
BOOLEAN DrawWbControlStretched( BOOLEAN bQualityBlt )
{
// get the pointers to the interfaces.
CComPtr<IWebBrowser2> piWebBrowser = m_wbBrowser.GetWebBrowser2InterfacePtr();
if ( piWebBrowser == NULL )
return FALSE;
CComQIPtr< IViewObject, &IID_IViewObject > piViewObject = piWebBrowser;
if ( piViewObject == NULL )
return FALSE;
CComQIPtr< IOleObject, &IID_IOleObject > piOleObject = piWebBrowser;
if ( piOleObject == NULL )
return FALSE;
// get the control dimensions.
HRESULT hr;
SIZEL slSizeHM, slSizePX;
hr = piOleObject->GetExtent( DVASPECT_CONTENT, & slSizeHM );
if ( FAILED( hr ) )
return FALSE;
::ConvertHiMetricsToPixels( & slSizeHM, & slSizePX, m_dcWebBrowserDrawDc.GetSafeHdc() );
// draw in the device context.
RECTL rctWebBrowserClientArea;
rctWebBrowserClientArea.left = 0;
rctWebBrowserClientArea.top = 0;
rctWebBrowserClientArea.right = slSizePX.cx;
rctWebBrowserClientArea.bottom = slSizePX.cy;
hr = piViewObject->Draw(
DVASPECT_CONTENT,
-1,
NULL,
NULL,
NULL,
m_dcWebBrowserDrawDc.GetSafeHdc(),
& rctWebBrowserClientArea,
NULL,
NULL,
|