【发布时间】:2023-03-31 02:23:01
【问题描述】:
我有一个 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,但是key没有变化。
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 案例,他们发现了问题,最后我们收到他们的消息,打算解决它。
【问题讨论】:
-
输入字段是什么类型的?
-
您能否为您的 OnKeyPress 事件发布一些示例代码以显示您在其中所做的事情?
-
您是否在 pvarResult 中返回 VARIANT_TRUE 以取消冒泡?
-
您好 Maurizio,感谢所有回复。我已经更新了上面截取的代码。当我复制它时,我删除了一些额外的逻辑,并在这样做时删除了最终的返回代码。为什么你认为它在 IE6、IE7、IE8 中完美运行,而在 IE9 中却不行。此代码已有 3 年多的历史,并且运行良好,并且正在生产中。它只在 IE9 中失败。再次感谢!
-
如果您查看有关 onkeypress 事件 link 的 MSDN 文档,您会注意到以下内容: 在 Internet Explorer 9 中,事件对象的类型取决于您使用的是 attachEvent 还是 addEventListener注册事件处理程序。如果您使用 addEventListener 注册处理程序,则会在事件期间传递一个 KeyboardEvent 类型的对象。如果您使用 attachEvent,则会传递旧事件对象。
标签: c++ internet-explorer-9 bho ihtmldocument2