问题描述
各位大虾,下面是我的C#代码,我想向webBrowser的某一个位置发送一个鼠标单击消息,但是我用了所有的办法,用SPY++检测都没法看到鼠标点击消息怎样才能像webbrowser的指定位置发鼠标单击消息,各位大虾能否给些指教,十分感谢。constintWM_LBUTTONDOWN=0x0201;//定义了鼠标的左键点击消息constintWM_LBUTTONUP=0x0202;//定义了鼠标的左键点击消息constintWM_CLICK=0x00F5;constintWM_SETFOCUS=0x0007;constintWM_MOUSEMOVE=0x0200;Pointp=newPoint(web.Location.X+10,web.Location.Y+10);IntPtri=(IntPtr)(25<<16)+50;SendMessage(this.ccwebBrowser.Handle,WM_MOUSEMOVE,(IntPtr)0,i);Thread.Sleep(500);SendMessage(this.ccwebBrowser.Handle,WM_SETFOCUS,(IntPtr)0,(IntPtr)0);SendMessage(this.ccwebBrowser.Handle,WM_CLICK,(IntPtr)0,i);SendMessage(this.ccwebBrowser.Handle,WM_LBUTTONDOWN,(IntPtr)0,i);SendMessage(this.ccwebBrowser.Handle,WM_LBUTTONUP,(IntPtr)0,i);
解决方案
解决方案二:
你没有取到正确的句柄,应该是:IntPtrhandle=webBrowser1.Handle;handle=GetWindow(handle,5);handle=FindWindowEx(handle,IntPtr.Zero,"ShellDocObjectView",null);handle=FindWindowEx(handle,IntPtr.Zero,"InternetExplorer_Server",null);这样拿到的才是正确的句柄。用这个handle去发消息,spy++就能捕捉到。测试通过。FindWindowEx的P/Invoke签名:[DllImport("user32.dll",SetLastError=true)]staticexternIntPtrFindWindowEx(IntPtrhWnd1,IntPtrhWnd2,stringlpsz1,stringlpsz2);
解决方案三:
感谢楼上大虾一大早把他测试了完全正确可是为什么用this.ccwebBrowser.Handle就不行一定要用handle=FindWindowEx(handle,IntPtr.Zero,"InternetExplorer_Server",null);呢webbrowser不是一个控件吗每个控件有他的句柄原理上似乎也没错楼上的大虾能否给点提示我也好自己去找相关资料了解下非常感谢
解决方案四:
我其实对这东西也不很懂,靠看spy++的信息及google出来的结果,多次调试出来的。
解决方案五:
其实你不是给webbrowser发消息,而是给他内部嵌入的document窗体发消息,你通过spy++可以看到窗口层次
解决方案六:
webbrowser和InternetExplorer_Server到底是一种什么关系啊
解决方案七:
学习学习!