0

我有一个 3 年前创建的 IE BHO,它使用 IHTMLEventObj::put_keyCode 函数。此功能已按照 IE6、IE7 和 IE8 中的说明工作。但是,当使用 IE9 RC 进行测试时,它不再像记录的那样工作。该函数以相同的方式调用,结果为 S_OK,但输入字段中未显示该键。即使在我的 Invoke() 函数中,也正在 DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS 中进行调用。

我发现有人遇到类似问题:http ://social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8-840b-8ad8d7d10081 ,但是由于某种原因我无法查看问题. 我能够使用谷歌缓存查看它:http ://webcache.googleusercontent.com/search?q=cache:3OkEceoi6jwJ:social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8- 840b-8ad8d7d10081+put_keyCode+IE9&cd=1&hl=pt-BR&ct=clnk&gl=br&source=www.google.com.br

任何帮助将不胜感激,这是一个需要尽快解决的关键问题。

提前致谢。

更新: 这是一些代码,但想强调的是,该代码在 IE6、IE7 和 IE8 中完美运行。在 IE9 中,它返回 S_OK,但密钥没有改变。

BOOL CToolBandObj::InvokeElementOnKeyPress (    DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,
                                            DISPPARAMS* pDispParams, VARIANT* pvarResult,
                                            EXCEPINFO*  pExcepInfo,  UINT* puArgErr)
{

    CComPtr<IDispatch> spEventObj;
    spEventObj = pDispParams->rgvarg[0].pdispVal;
    CComPtr<IHTMLEventObj> pHtmlEvent; 
    HRESULT hr = spEventObj->QueryInterface(IID_IHTMLEventObj,(LPVOID*)&pHtmlEvent);

    if (SUCCEEDED(hr) && pHtmlEvent)
    {
        CComPtr<IHTMLElement>spElement;
        hr = pHtmlEvent->get_srcElement(&spElement);

        _bstr_t bstrTag;
        spElement->get_tagName(&bstrTag.GetBSTR());

        if (SUCCEEDED(hr) && spElement)
        {
            LONG lKeyCode = 0;
            pHtmlEvent->get_keyCode(&lKeyCode);


            pHtmlEvent->put_keyCode(lKeyCode);
            pvarResult->vt = VT_BOOL;
            pvarResult->boolVal = VARIANT_TRUE;
            return TRUE;
        }
    }
}

更新 2

我们已经提交了 MSDN 案例,他们发现了问题,最后我们收到他们的消息,打算修复它。

4

1 回答 1

2

最终在打开一个案例和数周之后,发布了一个修复程序:IHTMLEventObj::put_keyCode 函数在 Internet Explorer 9 标准模式下不起作用

谢谢微软!

于 2011-10-12T12:40:47.097 回答