已知链接如下:http://XXX.com/YYY.exe
请问如何调用外部工具进行下载?
或者如何在内部控制进行下载?给具体例子的给100分.

解决方案 »

  1.   

    看下载工具的说明文档,支持命令行的话用ShellExecute调用即可
      

  2.   

    直接在你的程序中加入下载功能吧
    http://vckbase.com/document/viewdoc/?id=1208
      

  3.   

    使用ShellExecute调用迅雷可以吧
      

  4.   

    jiangsheng(蒋晟.Net[MVP]) ( ) 信誉:290    Blog   加为好友  2007-04-23 10:53:47  得分: 0  
     
     
       创建一个隐藏的浏览器控件,导航到这个网址
      
     
    ===========
    老大,没那么麻烦吧,我仅仅是要一个文件而已.
      

  5.   

    使用ShellExecute调用迅雷可以吧
    ============
    刚才测试过了,不行啊
      

  6.   

    看来只有jiangsheng(蒋晟.Net[MVP])的办法才行了
      

  7.   

    ShellExecute(0,"open","迅雷的路径+exe","http://xxx.yyy",....)
      

  8.   

    参考迅雷安装目录下的geturl.htm文件
      

  9.   

    <script language="javascript">
    function AddLink(Url,Info,Location,strCID,strStatUrl,strCookie)
    {
    if (Url != "")
    {
    if (Info == "")
    {
    Info = "unknown";
    }
    var ThunderAgent = new ActiveXObject("ThunderAgent.Agent");

    if (strCID != "")
    {
    if (strStatUrl != "")
    {

    ThunderAgent.AddTask5(Url, "", "", Info, Location, -1, 0, -1,  strCookie, strCID, strStatUrl, 1, "", -1);
    }
    else
    {
    ThunderAgent.AddTask5(Url, "", "", Info, Location, -1, 0, -1,  strCookie, strCID, "", 1, "", -1);
    }
    }
    else
    {
    ThunderAgent.AddTask5(Url, "", "", Info, Location,-1,0,-1,strCookie,"","", 1, "", -1);
    }
    ThunderAgent.CommitTasks2(1);
    }
    }function OnContextMenu()
    {
    var srcEvent = external.menuArguments.event;
    var EventElement;

    if(typeof(srcEvent.clientX) == "undefined")
    {
    EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.pointerX, srcEvent.pointerY );
    }
    else
    {
    EventElement = external.menuArguments.document.elementFromPoint ( srcEvent.clientX, srcEvent.clientY );
    }

    var strDownloadPage = external.menuArguments.location;
    var theDownloadPage = external.menuArguments.document.getElementById("thunder_down_pageurl");

    if (theDownloadPage != null)
    {
    strDownloadPage = theDownloadPage.value;
    }
    var strStatPage = "";
    var theStatPage = external.menuArguments.document.getElementById("thunder_stat_pageurl");
    if (theStatPage != null)
    {
    strStatPage = theStatPage.value;
    } var strCID = ""
    var theCID = external.menuArguments.document.getElementById("thunder_cid");
    if (theCID != null)
    {
    strCID = theCID.value;
    }
    var srcAnchor; if (srcEvent.type == "MenuExtAnchor")
    { srcAnchor = EventElement; do

    srcAnchor=srcAnchor.parentElement;
    }while(typeof(srcAnchor)=="HTMLAnchorElement");

    AddLink(srcAnchor.href,srcAnchor.innerText,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
    }
    else if (srcEvent.type == "MenuExtImage")
    {
    if (typeof(EventElement) == "HTMLAreaElement")
    {
    AddLink(EventElement.href,EventElement.Alt,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
    }
    else 
    {
    var srcImage = EventElement;
    var srcAnchor = srcImage.parentElement;
    do

    srcAnchor=srcAnchor.parentElement;
    if (typeof(srcAnchor) == "undefined")
    {
    AddLink(srcImage.href,srcImage.Alt,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
    return;
    }
    }while(typeof(srcAnchor) == "HTMLAnchorElement");
    AddLink(srcAnchor.href,srcImage.Alt,strDownloadPage, strCID, strStatPage);
    }
    }
    else if (srcEvent.type == "MenuExtUnknown")
    {
    srcAnchor = EventElement;
    if(srcAnchor != null && srcAnchor.tagName != null && srcAnchor.tagName.toLowerCase() == "a")
        {
    //Add by Ayu
    var strUrl = srcAnchor.href;
    if (srcAnchor.href.toLowerCase() == "javascript:;")
    {
    var strFunction = srcAnchor.onclick.toString();
    var nBegin = strFunction.indexOf("AddLink(\'");
    if (nBegin == -1)
    {
    return;
    }
    var nEnd = strFunction.indexOf("\',");
    if (nEnd == -1)
    {
    return;
    }
    strUrl = strFunction.substring(nBegin+9, nEnd);
    }
            AddLink(strUrl,srcAnchor.innerText,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
        }
        else
        {
            while(srcAnchor != null && srcAnchor.tagName != null && srcAnchor.tagName.toLowerCase() != "a")
            {
                srcAnchor = srcAnchor.parentElement;
                if(srcAnchor != null && srcAnchor.tagName != null && srcAnchor.tagName.toLowerCase() == "a")
                {
                    AddLink(srcAnchor.href,srcAnchor.innerText,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
                    return;
                }
            }

            if(EventElement != null && EventElement.tagName != null)
            {
                AddLink(EventElement.href,EventElement.innerText,strDownloadPage, strCID, strStatPage,external.menuArguments.document.cookie);
            }
            else
            {
                alert("无法识别的超级链接信息");
            }
        }
    }
    else
    {

    }
    }
    OnContextMenu();</script>
      

  10.   

    大哥,是jsp代码啊,我MFC的程序怎么调用?
      

  11.   

    是javascript脚本,但是调用的是一个activex控件,参数什么的都有,你在vc里面照样用一下试试
      

  12.   

    晕,不认识ocx,不会操作ocx,昏倒~~~
      

  13.   

    5.6  Internet文件下载 
    当你使用 NetAnts 下载 Internet 文件的时候,是否考虑自己动手写一个这样的程序呢?在
    这个小节里,会介绍
    Internet文件下载的一个例子。  
    5.6.1  实现原理 
    在这个例子中将使用Microsoft Win32 Internet(WinInet)API提供的接口。这些接口使得
    客户端程序能够轻松地访问标准的 Internet 协议,例如 Gopher、FTP 和 HTTP。先列出与本例
    子相关的
    API。 
    第一个 API 是 InternetGetConnectedState,它用来得到当前的网络连接信息,函数原型如
    下所示: 
    BOOL InternetGetConnectedState( 
              LPDWORD lpdwFlags, 
              DWORD dwReserved 
              ); 
    【参数说明】 
    lpdwFlags:<输出>一个长整型指针。它的值可以是下面几个标志的联合。 
    INTERNET_CONNECTION_CONFIGURED
    :本地系统有一个有效的连接,但是它有可能
    不在连接状态。  
    :本地系统使用局域网络连接到Internet。  
    INTERNET_CONNECTION_LAN
    INTERNET_CONNECTION_MODEM:本地系统使用Modem连接到Internet。  
    INTERNET_CONNECTION_MODEM_BUSY
    :不再使用。  
    INTERNET_CONNECTION_OFFLINE:本地系统处于离线状态。  
    INTERNET_CONNECTION_PROXY:本地系统使用代理服务器连接到Internet。 
    INTERNET_RAS_INSTALLED:本地系统安装了RAS  。 
    dwReserved
    :<输入>保留,必须设成0。 
    如果有Internet连接则返回TRUE否则返回FALSE。 
    第二个API是InternetOpen,用来打开一个Internet网络连接,函数原型如下所示: 
    HINTERNET InternetOpen( 
            LPCTSTR lpszAgent, 
            DWORD dwAccessType, 
            LPCTSTR lpszProxyName, 
            LPCTSTR lpszProxyBypass, 
            DWORD dwFlags 
            ); 
    【参数说明】 
    lpszAgent:<输入>用户代理的名字字符串。 
    dwAccessType
    :<输入>要求访问的类型。它可以是以下的值。 
    INTERNET_OPEN_TYPE_DIRECT:解析本地的所有主机名。  
    INTERNET_OPEN_TYPE_PRECONFIG:从注册表中获得代理信息或者直接配置信息。 
    INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY:从注册表中获得代理
    信息或者直接配置信息,但是不使用
    Microsoft开始信息和Internet文件。
      

  14.   

    INTERNET_OPEN_TYPE_PROXY:向代理发送请求。 
    :<输入>当参数dwAccessType被设置成INTERNET_OPEN_TYPE_PROXY
    lpszProxyName
    时,它表示代理服务器名称的指针。不要使用一个空串,因为InternetOpen 会将空串当做代理
    名称使用。  
    lpszProxyBypass
    :<输入>代理短路的IP 地址或者主机名字符串的指针。  
    :<输入>无符号长整型值标志。具体的内容读者可以参考MSDN。 
    dwFlags
    注意:InternetOpen 是应用程序第一个调用的 Internet 函数。它让 Internet DLL初始化 Internet 数据结构
    并且准备未来的应用程序的调用。 
    第三个API是InternetOpenUrl,它用来打开一个URL。函数原型如下所示: 
    HINTERNET InternetOpenUrl( 
            HINTERNET hInternet, 
            LPCTSTR lpszUrl, 
            LPCTSTR lpszHeaders, 
            DWORD dwHeadersLength, 
            DWORD dwFlags, 
            DWORD_PTR dwContext 
            ); 
    【参数说明】 
    :<输入>InternetOpen函数打开的HINTERNET句柄。  
    hInternet
    lpszUrl:<输入>URL字符串指针。  
    lpszHeaders:<输入>需要发送到HTTP 服务器的头信息字符串。  
    dwHeadersLength
    :<输入>lpszHeaders字符串长度。  
    dwFlags:<输入>无符号长整型API标志。  
    dwContext:<输入>无符号长整型的一个指针。具体介绍读者可以参考MSDN。 
    第四个API是HttpQueryInfo,它用来查看连接的信息。函数原型如下所示: 
    BOOL HttpQueryInfo( 
           HINTERNET hRequest, 
           DWORD dwInfoLevel, 
           LPVOID lpvBuffer, 
           LPDWORD lpdwBufferLength, 
           LPDWORD lpdwIndex 
           ); 
    【参数说明】 
    hRequest
    :<输入>InternetOpenUrl返回的一个HINTERNET结构指针。 
    dwInfoLevel:<输入>查询标志。  
    lpvBuffer:<输入>接收反馈信息的buffer。它必须设成NULL。 
    :<输入>buffer长度。 
    lpdwBufferLength
    lpdwIndex
    :<输入/输出>指向零起始的头索引,它用来枚举相同名字的多个头信息。 
    最后一个API是InternetReadFile,它用来读取Internet文件数据。函数原型如下所示: 
    BOOL InternetReadFile( 
           HINTERNET hFile, 
           LPVOID lpBuffer, 
           DWORD dwNumberOfBytesToRead, 
     LPDWORD lpdwNumberOfBytesRead 
           ); 
    【参数说明】 
    hFile
    :<输入>InternetOpenUrl返回的结构指针。 
    :<输入>读取数据的buffer。 
    lpBuffer
    dwNumberOfBytesToRead:<输入>需要读取的字节数。 
    lpdwNumberOfBytesRead:<输出>实际读取的字节数的指针。 
    有了上面的几个API,程序实现起来就很简单了。
      

  15.   

    其实不用调 迅雷 ,现在有专业的 多源剁线程ActiveX :糖果专业下载组件2.0
      http://www.languangav.com/soft/product_down.htm  下载速度不必迅雷慢