如何获取IE客户区的鼠标左键消息?

gzhoney 2007-09-07 04:47:59
我已经用ATL做了一个BHO,请问如何获取IE客户区的鼠标左键消息呢?请高手指点!我还想获取点击位置的坐标。谢谢大家!
...全文
504 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw 2007-09-10
  • 打赏
  • 举报
回复
是同一种东西。这个例子中叫CSinkObj。把Obj换成Document就比较接近了。
参考CSinkObj的实现,只不过你需要实现的是Click事件,而例子中是Tick
gzhoney 2007-09-10
  • 打赏
  • 举报
回复
看不懂这个具体的做法,dyw能不能稍微解释一下呀,好像越来越复杂了,你介绍的这篇文章似乎与CDocumentSink又没什么关系了...
dyw 2007-09-10
  • 打赏
  • 举报
回复
CDocumentSink需要你定义,做法参考:
http://support.microsoft.com/kb/194179/
gzhoney 2007-09-10
  • 打赏
  • 举报
回复
我在安放document事件钩子时:
CComObject<CDocumentSink> *pSink;编译器告诉我CDocumentSink未定义,该如何解决呢?
xyq1986 2007-09-10
  • 打赏
  • 举报
回复
是DISPID_HTMLDOCUMENTEVENTS2_ONCLICK消息,不是DISPID_CLICK!
dyw 2007-09-10
  • 打赏
  • 举报
回复
检查AtlAdvise的返回值:
hr = AtlAdvise(pSrcUnk, pSink, DIID_HTMLDocumentEvents, &dwDocCookie);
if (FAILED(hr)) {
goto cleanup;
}
gzhoney 2007-09-10
  • 打赏
  • 举报
回复
我写成这样,但点击鼠标左键还是没有反应,还是麻烦你看看,多谢了!
*************************************************
IUnknown* pUnk=NULL;
HRESULT CEyeOnIE::Invoke(DISPID dispidMember,
REFIID riid, LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
switch (dispidMember)
{
case DISPID_DOCUMENTCOMPLETE:
m_spWebBrowser2->QueryInterface(IID_IUnknown,(void**)&pUnk);
AtlAdvise(pUnk,GetUnknown(),DIID_HTMLDocumentEvents,&mCookie);
pUnk->Release();
break;
case DISPID_CLICK:
::MessageBox(NULL,_T("test"),NULL,NULL);
break;
}
}
***************************************************
按照我的理解,程序应先执行DISPID_DOCUMENTCOMPLETE里的声明,等钩子挂上后,就应该
可以执行DISPID_CLICK里的代码了,但实际情况里,当在文档区域点击鼠标左键后,为什
么后者没有执行呢?
dyw 2007-09-08
  • 打赏
  • 举报
回复
获得IHTMLEventObj接口指针,就能得到。获取方法见1楼
gzhoney 2007-09-08
  • 打赏
  • 举报
回复
谢谢三位大哥,还想问一下,如何能取道鼠标点击的位置呢?完了就结束问题了!谢谢各位大哥!
dyw 2007-09-07
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/246247
allenshi_szl 2007-09-07
  • 打赏
  • 举报
回复
case DISPID_HTMLELEMENTEVENTS2_ONCLICK:
// [0]: IHTMLEventObj * pEvtObj Pointer to an IHTMLEventObj interface for the current event.
// [1]: Cancel flag - VT_BYREF|VT_BOOL
{
VARIANT_BOOL* pVarBool = pDispParams->rgvarg[1].pboolVal;
LPDISPATCH pDisp = pDispParams->rgvarg[0].pdispVal;
if( pDisp )
{
IHTMLEventObj* pHTMLEvent = NULL;
LRESULT hrQuery = pDisp->QueryInterface( IID_IHTMLEventObj, (void**)&pHTMLEvent );
if( (S_OK == hrQuery) && (pHTMLEvent!=NULL) )
{
//处理左键
}
}
}
break;
xyq1986 2007-09-07
  • 打赏
  • 举报
回复
HTMLDocumentEvent的DISPID_HTMLDOCUMENTEVENTS2_ONCLICK消息
IHTMLEventObj的clientX和clientY
CComPtr<IHTMLWindow2> htmlWin;
hr=this->mHtmlDoc->get_parentWindow(&htmlWin);
……
CComPtr<IHTMLEventObj> eventObj;
hr=htmlWin->get_event(&eventObj);
……

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧