IHTMLEventObj :: put_keyCode在IE9 RC中失败

时间:2011-02-26 13:08:45

标签: c++ internet-explorer-9 bho ihtmldocument2

我有一个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,但由于某种原因,我无法查看该问题。我能够使用google缓存查看它: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案例,他们已经找到了这个问题,最后我们听到他们要解决这个问题。

1 个答案:

答案 0 :(得分:2)

最后,在打开案例数周后,发布了一个修补程序:The IHTMLEventObj::put_keyCode function does not work in Internet Explorer 9 Standards mode

谢谢微软!