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 ケースを提出しました。彼らは問題を発見しました。最後に彼らから聞いたのは、それを修正しようとしているということです。