我有一个 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 ,但是由于某种原因我无法查看问题. 我能够使用谷歌缓存查看它: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 案例,他们发现了问题,最后我们收到他们的消息,打算修复它。