IWebBrowser2的Invoke方法中的DISPID_FILEDOWNLOAD,如何获取当前下载链接? 本帖最后由 taotaoeta 于 2014-12-11 09:20:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不太清楚你如何建立的连接,我的程序中因为PHP程序也是自己写的,所以用以下函数下载,仅供参考// GET操作// php=文件名 param=用&分隔的参数名=参数// realm和nonce为认证信息///* --- GET 操作实例,执行hoyola下的test.php文件,Authorization为认证语句 ----GET /hoyola/test.php?type=txt&name=hao HTTP/1.1Host: www.hoyola.comAuthorization: Digest username="webspeech",nonce="4d40f2973b633", opaque="72d64498e61961e97d514654f6f899f7",response="32d05a1f62d16cf44d438e85afe9446e"*/char* CMyWebProc::GETheadToWEB(int &l, // 返回申请头长度 CString php, // WEB处理PHP文件名 CString realm, // 认证区域 CString nonce, // 认证用 CString param) // 要附加的POST参数,用&分隔,格式为参数名=参数{ CString digest=GetDigest(realm,nonce,_T("GET")); // 取认证语句 CString pa=_T(""); if(!param.IsEmpty()) { pa=_T("?")+param; // 参数用以传送查询类型,下载文件名不用传 } // 组装GET语句 CString query=_T("GET ") SERVICE_DIR; query+=php+pa+HTTP_VER CRLF HTTP_HOST; if(!digest.IsEmpty()) query+=CRLF+digest; // 认证 query+=HEAD_END; // 头结束 int len=UnicodToAnsi(query); // 取长度 // 发送数据缓冲区指针 char *p=new char[len]; memset(p,0x00,len); l=UnicodToAnsi(query,p,len); // 写数据到缓冲区 return p;} HRESULT __stdcall QWebBrowserEvent::Invoke(DISPID _dispIdMember,REFIID _riid,LCID _lcid,WORD _wFlags,DISPPARAMS *_pDispParams,VARIANT *_pVarResult,EXCEPINFO *_pExcepInfo,UINT *_puArgErr){ HRESULT t_Result = S_OK; switch (_dispIdMember) { case DISPID_FILEDOWNLOAD: //270 // Fired to indicate the File Download dialog is opening //tested assert(_pDispParams->cArgs == 2); assert(_pDispParams->rgvarg[1].vt == VT_BOOL); assert(_pDispParams->rgvarg[0].vt == VT_BYREF + VT_BOOL); if (!m_OnFileDownload.empty()) { { *(_pDispParams->rgvarg[0].pboolVal) = VARIANT_TRUE;//disable ie download manager t_Result = m_OnFileDownload(_pDispParams->rgvarg[1].boolVal, _pDispParams->rgvarg[0].pboolVal); } } break; HRESULT __stdcall QWebBrowserEvent::Invoke(DISPID _dispIdMember,REFIID _riid,LCID _lcid,WORD _wFlags,DISPPARAMS *_pDispParams,VARIANT *_pVarResult,EXCEPINFO *_pExcepInfo,UINT *_puArgErr){ HRESULT t_Result = S_OK; switch (_dispIdMember) { case DISPID_FILEDOWNLOAD: //270 // Fired to indicate the File Download dialog is opening //tested assert(_pDispParams->cArgs == 2); assert(_pDispParams->rgvarg[1].vt == VT_BOOL); assert(_pDispParams->rgvarg[0].vt == VT_BYREF + VT_BOOL); if (!m_OnFileDownload.empty()) { { *(_pDispParams->rgvarg[0].pboolVal) = VARIANT_TRUE;//disable ie download manager t_Result = m_OnFileDownload(_pDispParams->rgvarg[1].boolVal, _pDispParams->rgvarg[0].pboolVal); } } break; 修改注册表,使用IDownloadManagerHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer修改DownloadUI的值为这个接口的clsid,IE下载全部拦截,连右键另存为都会拦截,获得地址hr=pmk->GetDisplayName(pbc,0,&ps); 请高手帮看一下,我用双缓冲绘图为什么屏幕还很闪 改变控件颜色问题 光源问题?? 有没有一种软件.输入几个点就可在立体空间产生一个面的软件.. 隐藏基于对话框的应用程序 求教:在用户界面中如何调用其他类的成员变量 ctreectrl控件的问题? WSAPROTOCOL_INFO a;//这条语句有什么不对吗? 服务器没有打开,那么程序就死了,请问怎么解决 __asm{}里怎么用INVOKE来调用函数?? vs2005 ole 连接access文件,总是失败,GetDataSource返回异常 【求助】python实现tcp会话重组
// php=文件名 param=用&分隔的参数名=参数
// realm和nonce为认证信息
//
/* --- GET 操作实例,执行hoyola下的test.php文件,Authorization为认证语句 ----
GET /hoyola/test.php?type=txt&name=hao HTTP/1.1
Host: www.hoyola.com
Authorization: Digest username="webspeech",nonce="4d40f2973b633",
opaque="72d64498e61961e97d514654f6f899f7",response="32d05a1f62d16cf44d438e85afe9446e"*/
char* CMyWebProc::GETheadToWEB(int &l, // 返回申请头长度
CString php, // WEB处理PHP文件名
CString realm, // 认证区域
CString nonce, // 认证用
CString param) // 要附加的POST参数,用&分隔,格式为参数名=参数
{
CString digest=GetDigest(realm,nonce,_T("GET")); // 取认证语句
CString pa=_T("");
if(!param.IsEmpty())
{
pa=_T("?")+param; // 参数用以传送查询类型,下载文件名不用传
}
// 组装GET语句
CString query=_T("GET ") SERVICE_DIR;
query+=php+pa+HTTP_VER CRLF HTTP_HOST;
if(!digest.IsEmpty())
query+=CRLF+digest; // 认证
query+=HEAD_END; // 头结束
int len=UnicodToAnsi(query); // 取长度 // 发送数据缓冲区指针
char *p=new char[len];
memset(p,0x00,len);
l=UnicodToAnsi(query,p,len); // 写数据到缓冲区
return p;
}
{
HRESULT t_Result = S_OK;
switch (_dispIdMember)
{
case DISPID_FILEDOWNLOAD: //270 // Fired to indicate the File Download dialog is opening
//tested
assert(_pDispParams->cArgs == 2);
assert(_pDispParams->rgvarg[1].vt == VT_BOOL);
assert(_pDispParams->rgvarg[0].vt == VT_BYREF + VT_BOOL);
if (!m_OnFileDownload.empty())
{ {
*(_pDispParams->rgvarg[0].pboolVal) = VARIANT_TRUE;//disable ie download manager
t_Result = m_OnFileDownload(_pDispParams->rgvarg[1].boolVal, _pDispParams->rgvarg[0].pboolVal);
}
} break;
{
HRESULT t_Result = S_OK;
switch (_dispIdMember)
{
case DISPID_FILEDOWNLOAD: //270 // Fired to indicate the File Download dialog is opening
//tested
assert(_pDispParams->cArgs == 2);
assert(_pDispParams->rgvarg[1].vt == VT_BOOL);
assert(_pDispParams->rgvarg[0].vt == VT_BYREF + VT_BOOL);
if (!m_OnFileDownload.empty())
{ {
*(_pDispParams->rgvarg[0].pboolVal) = VARIANT_TRUE;//disable ie download manager
t_Result = m_OnFileDownload(_pDispParams->rgvarg[1].boolVal, _pDispParams->rgvarg[0].pboolVal);
}
} break;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer修改DownloadUI的值为这个接口的clsid,IE下载全部拦截,连右键另存为都会拦截,获得地址hr=pmk->GetDisplayName(pbc,0,&ps);