我有一个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,但由于某种原因,我无法查看该问题。我能够使用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案例,他们已经找到了这个问题,最后我们听到他们要解决这个问题。
答案 0 :(得分:2)
最后,在打开案例数周后,发布了一个修补程序:The IHTMLEventObj::put_keyCode function does not work in Internet Explorer 9 Standards mode。
谢谢微软!