CComQIPtr<IHTMLDocument2> spDoc2;
CComQIPtr<IDispatch> spDoc2Disp;
spEle->get_document(&spDoc2Disp);
if(spDoc2Disp == NULL)
return 1;
spDoc2 = spDoc2Disp;
CComQIPtr<IHTMLDocument4> spDoc4 = spDoc2;
if(spDoc4 == NULL)
return 1;
CComPtr<IHTMLEventObj> spEvent;
CComVariant var;
spDoc4->createEventObject(&var, &spEvent);
CComQIPtr<IHTMLEventObj2> spEvent2(spEvent);
CComBSTR eventName = "onclick";
spEvent2->put_type(eventName);
CComQIPtr<IHTMLElement3, &IID_IHTMLElement3> spEle3(spEle);
VARIANT_BOOL varbResult;
CComVariant varEvent = spEvent;
hr = spEle3->fireEvent(eventName, &varEvent, &varbResult);
13 个解决方案
#1
首选你要确定这个element的处理确实是在onclick中
#2
我对html的处理不是特别了解,我想达到的目的就是:系统使用FireEvent方法自动的点击(包括左键和右键点击)操作网页上的一个元素,就像我们直接用鼠标点击操作一样,你所提到的“element的处理确实是在onclick中”,这个不太理解,能否给出点详细解释,十分感谢!
#3
如果只是click,调用IHTMLElement::click 方法就可以了,它会自动触发onclick事件
但是有些页面不一定是在onclick中进行处理的,比如,它可以选则在双击,或者onkeydown中进行处理。你看看页面的源代码就知道它具体是在什么事件中进行处理的了
但是有些页面不一定是在onclick中进行处理的,比如,它可以选则在双击,或者onkeydown中进行处理。你看看页面的源代码就知道它具体是在什么事件中进行处理的了
#4
1, "onclick"是错误的事件名;
2. IHTMLElement有click方法,直接用就是了.何必多此一举?
=======================================================
FreeLaxy, your backup.
=======================================================
2. IHTMLElement有click方法,直接用就是了.何必多此一举?
=======================================================
FreeLaxy, your backup.
=======================================================
#5
上面两位楼友好,IHTMLElement的click方法我知道,这个可以模拟系统的鼠标左键点击操作,我现在希望不仅仅是模拟左键点击,我还需要模拟双击、右键点击等操作,这个用FireEvent到底可以实现么?我现在很困惑,不知道思路上到底哪里出现了错误或断层,请上面两位老兄给点指点!多谢!
#6
说简单也简单, 先算出目标element的位置, 然后想HWND=Internet Explorer_sever发送鼠标消息, 根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息.别告诉MS
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#7
好的,我试试看,成功的话,马上结贴!非常感谢
#8
如果不成功, 不是我的方法不对, 而是你的代码没到位, 请不要找借口不结贴.
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#9
请兄弟放心!! 做事先做人,呵呵!
#10
兄弟不放心, IHTMLElement的rect不好算, 特别是嵌套FRAME,DIV带滚动条时,够你一个周折腾的.
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#11
哈哈,我先找个最简单的情况测测看
#12
freelaxy 朋友:
我进行了如下测试,正确获取了Internet Explorer_sever 句柄HWND,正确获取了元素在客户区的坐标,如果网页在前端,下面消息发送是正确的,可以正确点击。但是如果页面没有在前端,就无法模拟,
上回朋友所说的“根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息”,这个是怎么实现的?难道是我下面发送消息的模式不对,还是我忽略什么关键地方?请指正!非常感谢!
::SendMessage(hIEServer,WM_LBUTTONDOWN,NULL,MAKELONG(pt.x,pt.y));
::SendMessage(hIEServer,WM_LBUTTONUP,NULL,MAKELONG(pt.x,pt.y));
我进行了如下测试,正确获取了Internet Explorer_sever 句柄HWND,正确获取了元素在客户区的坐标,如果网页在前端,下面消息发送是正确的,可以正确点击。但是如果页面没有在前端,就无法模拟,
上回朋友所说的“根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息”,这个是怎么实现的?难道是我下面发送消息的模式不对,还是我忽略什么关键地方?请指正!非常感谢!
::SendMessage(hIEServer,WM_LBUTTONDOWN,NULL,MAKELONG(pt.x,pt.y));
::SendMessage(hIEServer,WM_LBUTTONUP,NULL,MAKELONG(pt.x,pt.y));
#13
学习了!留个脚印
#1
首选你要确定这个element的处理确实是在onclick中
#2
我对html的处理不是特别了解,我想达到的目的就是:系统使用FireEvent方法自动的点击(包括左键和右键点击)操作网页上的一个元素,就像我们直接用鼠标点击操作一样,你所提到的“element的处理确实是在onclick中”,这个不太理解,能否给出点详细解释,十分感谢!
#3
如果只是click,调用IHTMLElement::click 方法就可以了,它会自动触发onclick事件
但是有些页面不一定是在onclick中进行处理的,比如,它可以选则在双击,或者onkeydown中进行处理。你看看页面的源代码就知道它具体是在什么事件中进行处理的了
但是有些页面不一定是在onclick中进行处理的,比如,它可以选则在双击,或者onkeydown中进行处理。你看看页面的源代码就知道它具体是在什么事件中进行处理的了
#4
1, "onclick"是错误的事件名;
2. IHTMLElement有click方法,直接用就是了.何必多此一举?
=======================================================
FreeLaxy, your backup.
=======================================================
2. IHTMLElement有click方法,直接用就是了.何必多此一举?
=======================================================
FreeLaxy, your backup.
=======================================================
#5
上面两位楼友好,IHTMLElement的click方法我知道,这个可以模拟系统的鼠标左键点击操作,我现在希望不仅仅是模拟左键点击,我还需要模拟双击、右键点击等操作,这个用FireEvent到底可以实现么?我现在很困惑,不知道思路上到底哪里出现了错误或断层,请上面两位老兄给点指点!多谢!
#6
说简单也简单, 先算出目标element的位置, 然后想HWND=Internet Explorer_sever发送鼠标消息, 根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息.别告诉MS
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#7
好的,我试试看,成功的话,马上结贴!非常感谢
#8
如果不成功, 不是我的方法不对, 而是你的代码没到位, 请不要找借口不结贴.
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#9
请兄弟放心!! 做事先做人,呵呵!
#10
兄弟不放心, IHTMLElement的rect不好算, 特别是嵌套FRAME,DIV带滚动条时,够你一个周折腾的.
=======================================================
FreeLaxy, your backup.
=======================================================
=======================================================
FreeLaxy, your backup.
=======================================================
#11
哈哈,我先找个最简单的情况测测看
#12
freelaxy 朋友:
我进行了如下测试,正确获取了Internet Explorer_sever 句柄HWND,正确获取了元素在客户区的坐标,如果网页在前端,下面消息发送是正确的,可以正确点击。但是如果页面没有在前端,就无法模拟,
上回朋友所说的“根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息”,这个是怎么实现的?难道是我下面发送消息的模式不对,还是我忽略什么关键地方?请指正!非常感谢!
::SendMessage(hIEServer,WM_LBUTTONDOWN,NULL,MAKELONG(pt.x,pt.y));
::SendMessage(hIEServer,WM_LBUTTONUP,NULL,MAKELONG(pt.x,pt.y));
我进行了如下测试,正确获取了Internet Explorer_sever 句柄HWND,正确获取了元素在客户区的坐标,如果网页在前端,下面消息发送是正确的,可以正确点击。但是如果页面没有在前端,就无法模拟,
上回朋友所说的“根据试验, 即使窗口不在前台(focus/foreground), 仍然会傻乎乎地接受鼠标和键盘消息”,这个是怎么实现的?难道是我下面发送消息的模式不对,还是我忽略什么关键地方?请指正!非常感谢!
::SendMessage(hIEServer,WM_LBUTTONDOWN,NULL,MAKELONG(pt.x,pt.y));
::SendMessage(hIEServer,WM_LBUTTONUP,NULL,MAKELONG(pt.x,pt.y));
#13
学习了!留个脚印