0

IHTMLEventObj::put_keyCode 関数を使用する 3 年以上前に作成された IE BHO があります。この関数は、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 ケースを提出しました。彼らは問題を発見しました。最後に彼らから聞いたのは、それを修正しようとしているということです。

4

1 に答える 1

2

ケースを開いて何週間も経った後、ようやく修正プログラムがリリースされました。IHTMLEventObj::put_keyCode 関数は Internet Explorer 9 標準モードでは機能しません

ありがとうマイクロソフト!

于 2011-10-12T12:40:47.097 に答える