我用VC开发了个BHO,导致IE无响应,不知道怎么回事,大家有什么建议吗

解决方案 »

  1.   

    你的BHO都做什么了?
    屏蔽一些功能在试试
    具体定位后才好分析原因
      

  2.   

    bool CEventSink::OnDocumentComplete()
    {
    HRESULT hr;
    VARIANT v[3];

    if (g_pSite) {
    IDispatch *pDocDisp;
    IHTMLDocument2 *pDocument;
    hr = g_pSite->get_Document(&pDocDisp);
    if (FAILED(hr)||pDocDisp==NULL) return true; /*HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(IDR_JS1), RT_HTML);
    HRSRC hResLoad = (HRSRC)LoadResource(hInstance, hRes);
    LPVOID lpResLock = LockResource(hResLoad);*/
    //MessageBox(NULL,(LPCWSTR)lpResLock,L"aaaa",0);
    if(pDocDisp) {
    hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDocument);
    if (FAILED(hr)||pDocDisp==NULL) return true;
    if(pDocument) {
    IHTMLLocation * pLoc= NULL;
    BSTR  location;
    BSTR  host;
    hr = pDocument->get_URL(&location);
    if (FAILED(hr)||location==NULL) return true;
    hr = pDocument->get_location(&pLoc);
    if (FAILED(hr)||pLoc==NULL) return true;
    hr = pLoc->get_hostname(&host);
    if (FAILED(hr)||host==NULL) return true; if (wcsicmp(host,L"www.amazon.com")==0) {
    for(int n=0;n<3;n++) VariantInit(&v[n]);
    IHTMLElement * pBody = NULL;
    IHTMLElement *hidEle=NULL;
    IHTMLDOMNode *pNodeBody= NULL;
    IHTMLDOMNode *hidNode= NULL;
    hr = pDocument->get_body(&pBody);
    if (FAILED(hr)||pBody==NULL) return true;
    hr = pDocument->createElement(L"input", &hidEle);
    if (FAILED(hr)||hidEle==NULL) return true;
    hr = pBody-> QueryInterface(IID_IHTMLDOMNode,(void**)&pNodeBody);
    if (FAILED(hr)||pNodeBody==NULL) return true;
    hr = hidEle-> QueryInterface(IID_IHTMLDOMNode,(void**)&hidNode);
    if (FAILED(hr)||hidNode==NULL) return true;
    pNodeBody-> appendChild(hidNode,NULL); char *ratio = '\0';
    ratio = RequestURL(L"http://api.liqwei.com/currency/?exchange=USD|CNY&count=1");
    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, ratio, strlen(ratio), NULL, 0);
    wchar_t* wszString = new wchar_t[wcsLen + 1]; 
    ::MultiByteToWideChar(CP_ACP, NULL, ratio, strlen(ratio), wszString, wcsLen);
    wszString[wcsLen] = '\0';  v[0].vt=VT_BSTR;
    v[1].vt=VT_BSTR;
    v[2].vt=VT_BSTR;
    v[1].bstrVal = wszString;
    v[0].bstrVal =  L"hidden";
    hidEle->put_id(L"superTaoRatio");
    hidEle->setAttribute(L"type",v[0]);
    hidEle->setAttribute(L"value",v[1]); IHTMLWindow2 *pWin;
    pDocument->get_parentWindow(&pWin);

    //_bstr_t text1(_T("var html_head1=document.getElementsByTagName('head')[0];var _js1=document.createElement('script');_js1.setAttribute('type', 'text/javascript'); html_head1.appendChild(_js1);_js1.text=\"alert('asdfasdfasdfasd');\"")); 
    /*int textlen = ::MultiByteToWideChar(CP_ACP, NULL, text4, strlen(text4), NULL, 0);
    wchar_t* textStr = new wchar_t[textlen + 1]; 
    ::MultiByteToWideChar(CP_ACP, NULL, text4, strlen(text4), textStr, textlen);
    textStr[textlen] = '\0'; */ _bstr_t scra(_T("var url =document.location.href; var reg1='/dp\/([A-Z0-9]{10})/'; var reg2='/gp\/product\/{1,2}([A-Z0-9]{10})/';if(url.match(reg1)||url.match(reg2)){if(!(document.getElementById('_jsehtaodotnet_'))){var html_head1=document.getElementsByTagName('head')[0];var _js1=document.createElement('script');_js1.setAttribute('type', 'text/javascript'); _js1.setAttribute('id','_jsehtaodotnet_');_js1.setAttribute('src', 'http://ehtao.net/SuperTao.js');html_head1.appendChild(_js1);}}"));
    //_bstr_t scra(text1);

    _bstr_t jtype(_T("javascript"));
    hr = pWin->execScript(scra, jtype, &v[2]); delete ratio;
    ratio=NULL;
    delete [] wszString;
    wszString=NULL;
    hidEle->Release();
    hidEle=NULL;
    hidNode->Release();
    hidNode=NULL;
    pWin->Release();
    pWin=NULL;
    pBody->Release();
    pBody=NULL;
    pNodeBody->Release();
    pNodeBody=NULL;
    }
    SysFreeString(location);
    SysFreeString(host);
    pLoc->Release();
    pLoc=NULL;
    pDocument->Release();
    pDocument=NULL;
    }
    pDocDisp->Release();
    pDocDisp=NULL;
    }
    }
    //for(int n=0;n<3;n++) VariantClear(&v[n]);
    return True;}
      

  3.   

    添加Log,看你的OnDocumentComplete是否正常执行成功