IHTMLEventObj :: put_keyCode не работает в IE9 RC - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть IE BHO, созданный более 3 лет назад, который использует функцию IHTMLEventObj :: put_keyCode.Эта функция работала, как описано в IE6, IE7 и IE8.Однако при тестировании с IE9 RC он больше не работает, как описано в документации.Функция вызывается так же, и в результате получается S_OK, но ключ не отображается в поле ввода.В DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS выполняется вызов даже моей функции Invoke ().

Я нашел кого-то с похожей проблемой: 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 Ответ

2 голосов
/ 12 октября 2011

Наконец, после открытия дела и многих недель, было выпущено исправление: Функция IHTMLEventObj :: put_keyCode не работает в стандартном режиме Internet Explorer 9 .

Спасибо, Microsoft!

...