已知链接如下:http://XXX.com/YYY.exe
请问如何调用外部工具进行下载?
或者如何在内部控制进行下载?给具体例子的给100分.
请问如何调用外部工具进行下载?
或者如何在内部控制进行下载?给具体例子的给100分.
解决方案 »
- 一个小问题::
- 对话框样式问题
- 网络编程中的多线程运用问题
- 请问VC方面有什么好书
- dbgrid问题
- 请教高手:输入框失去焦点,焦点进入另一输入框时,如果弹出了对话框,焦点进入的输入框将无法马上输入。
- 求教C++问题,高手请帮下
- 用kalman对遮挡目标进行预测时,为什么跟踪框不动了?
- 如何获得onok的推出控制?按书上说改变ok按钮的id把onok函数分离出来,然后新建一个函数来响应该后的按钮id,原来onok里的cdialog::onok()也已经删掉了,可怎么一运行按enter后还是跟按ok一样呢?
- 请教怎么将BSTR类型转为 char*
- 寻找syy64(太平洋)!
- 跪求高手帮助!~~~~图像处理的问题
http://vckbase.com/document/viewdoc/?id=1208
创建一个隐藏的浏览器控件,导航到这个网址
===========
老大,没那么麻烦吧,我仅仅是要一个文件而已.
============
刚才测试过了,不行啊
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>
当你使用 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文件。
:<输入>当参数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,程序实现起来就很简单了。
http://www.languangav.com/soft/product_down.htm 下载速度不必迅雷慢