perl

use strict;
use Win32::OLE;
use Data::Dumper;

my $wshell = Win32::OLE->new('Shell.Application') or die "oops\n";
my $HISTORY_FOLDER = 0x22;
my $history_dir = $wshell->Namespace($HISTORY_FOLDER);
my $url_list = scan_folder($history_dir, []);
print Dumper $url_list;
sub scan_folder{
    my ($folder, $ref) = @_;
    my $items = $folder->items;
    for(my $i = 0;$i < $items->count; $i++){
        my $item = $items->item($i);
        if($item->IsFolder){
            scan_folder($item->GetFolder, $ref);
        } else {
            my $url   = $folder->GetDetailsOf($item,0);
            my $title = $folder->GetDetailsOf($item,1);
            push @{$ref}, [$url, $title];
        }
    }
    return $ref;
}
exit;