IHTMLEventObj :: put_keyCode在IE9 RC中失败 [英] IHTMLEventObj::put_keyCode fails in IE9 RC

查看:200
本文介绍了IHTMLEventObj :: put_keyCode在IE9 RC中失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有3年前创建的IE BHO,它使用IHTMLEventObj :: put_keyCode函数. IE6,IE7和IE8中记录了此功能.但是,在使用IE9 RC进行测试时,它不再能按文档所述工作.该函数的调用方式相同,结果为S_OK,但是键未显示在输入字段中.甚至在我的Invoke()函数中,该调用也在DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS中进行.

I have an IE BHO created over 3 years ago that uses IHTMLEventObj::put_keyCode function. This function has worked as documented in IE6, IE7 and IE8. However, when testing with IE9 RC it no longer works as documented. The function is called the same way and the result is S_OK, but the key does not show up in the input field. The call is being made in the DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS even of my Invoke() function.

我发现有人遇到类似的问题: 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 .

I found someone with a similar problem: http://social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8-840b-8ad8d7d10081, however for some reason I am not able to view the issue. I was able to view it using google cache: 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.

任何帮助将不胜感激,这是一个亟待解决的关键问题.

Any help would be greatly appreciated this is a critical issue that needs to be addressed asap.

谢谢.

更新: 这是一些代码,但要强调一点,该代码在IE6,IE7和IE8中可以完美地工作.在IE9中,它返回S_OK,但是密钥没有更改.

UPDATE: Here is some code, but wanted to stress, that this code works perfectly in IE6, IE7 and IE8. In IE9, it returns S_OK, but the key is not changed.

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案例,他们找到了问题,最后我们听到他们要解决此问题.

We have filed a MSDN Case, they have found the issue, and last we heard from them were going to fix it.

推荐答案

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

Finally after opening a case and many weeks, a fix was released: The IHTMLEventObj::put_keyCode function does not work in Internet Explorer 9 Standards mode.

谢谢微软!

这篇关于IHTMLEventObj :: put_keyCode在IE9 RC中失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆