我用ATL做的,想捕获鼠标在网页上移动的事件,最新的2003 platform sdk我也已经安装成功,程序也编译通过了,但我dll注册后,打开一个新的web页面后,鼠标移动还是不起作用,DISPID_DOCUMENTCOMPLETE的事件相应是可以的,不知道是什么原因,请各位高手帮我分析一下,一下是我在invoke函数中的代码HRESULT CMyBHO::Invoke(DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
if( pDispParams==NULL )
return E_INVALIDARG; if( m_spWebBrowser2==NULL )
return E_FAIL;
switch( dispidMember )
{
case DISPID_NAVIGATECOMPLETE2:
{
// MessageBox( NULL, "This is a test Test", "Test", MB_OK );
}
break; case DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE: //DISPID_DOCUMENTCOMPLETE
{
//MessageBox( NULL, "This is a test Test", "Test", MB_OK );
::MessageBox(NULL, _T("This is a test Test"),_T("Test"),MB_ICONSTOP);
return S_OK;
} //sink HTMLDocumentEvents2;
break; default:break;
}
return S_OK;
}
编译通过的信息:
Compiling...
MyBHO.cpp
Linking...
Performing registrationBHOTest.dll - 0 error(s), 0 warning(s)
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
if( pDispParams==NULL )
return E_INVALIDARG; if( m_spWebBrowser2==NULL )
return E_FAIL;
switch( dispidMember )
{
case DISPID_NAVIGATECOMPLETE2:
{
// MessageBox( NULL, "This is a test Test", "Test", MB_OK );
}
break; case DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE: //DISPID_DOCUMENTCOMPLETE
{
//MessageBox( NULL, "This is a test Test", "Test", MB_OK );
::MessageBox(NULL, _T("This is a test Test"),_T("Test"),MB_ICONSTOP);
return S_OK;
} //sink HTMLDocumentEvents2;
break; default:break;
}
return S_OK;
}
编译通过的信息:
Compiling...
MyBHO.cpp
Linking...
Performing registrationBHOTest.dll - 0 error(s), 0 warning(s)
你可以直接发消息到主线程或是写个什么日志文件,测试或显示你的结果,不要在里面尝试做中断BHO的事件执行的操作
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
HANDLE hDIBFile = NULL;
if( pDispParams==NULL )
return E_INVALIDARG; if( m_spWebBrowser2==NULL )
return E_FAIL;
switch( dispidMember )
{
case DISPID_NAVIGATECOMPLETE2:
{
}
break; case DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER:
{
hDIBFile = CreateFile(TEXT("c:\\aa.txt"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
BOOL bRet = FALSE;
DWORD NumByteWritten = 0;
bRet = WriteFile(hDIBFile,TEXT("JUST A TEST"),sizeof(TEXT("JUST A TEST")) , &NumByteWritten, NULL);
CloseHandle(hDIBFile);
}
break; default:break;
}
return S_OK;
}
是不是DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER不应该在invoke中处理呢,可我查资料感觉invoke可以接受ie里的任何事件啊,郁闷~~
比如一个元素的children或者all属性,或者document的一些返回元素集合的属性或者方法
蒋大侠提到的应该是比较正确的方向,是否有相关的例程可以参考一下,先谢了