本帖最后由 taotaoeta 于 2014-12-11 09:20:35 编辑

解决方案 »

  1.   

    不太清楚你如何建立的连接,我的程序中因为PHP程序也是自己写的,所以用以下函数下载,仅供参考// GET操作
    // 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;
    }
      

  2.   

    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;
      

  3.   

    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;
      

  4.   

    修改注册表,使用IDownloadManager
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer修改DownloadUI的值为这个接口的clsid,IE下载全部拦截,连右键另存为都会拦截,获得地址hr=pmk->GetDisplayName(pbc,0,&ps);