webBrowser获取网页flash句柄模拟单击的问题

pengxuan 2011-01-07 11:12:47

private bool EnumChildWindowsCallback(IntPtr handle, IntPtr lparam)
{
StringBuilder className = new StringBuilder(100);
GetClassName(handle, className, className.Capacity);
MessageBox.Show(className.ToString());

string cn = className.ToString();
if (className.ToString() == "MacromediaFlashPlayerActiveX")
{
Point point = GetFlashPointFromHandle(handle);
if (point.X == ((webBrowser1.Document.DomDocument) as HTMLDocument).getElementById("obj1").offsetLeft && point.Y == ((webBrowser1.Document.DomDocument) as HTMLDocument).getElementById("obj1").offsetTop)
{
webBrowser1.Document.Body.ScrollTop = point.Y;
int x = Convert.ToInt32(textBox1.Text); // X coordinate of the click
int y = Convert.ToInt32(textBox2.Text); // Y coordinate of the click
IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates
IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl)
const uint downCode = 0x201; // Left click down code
const uint upCode = 0x202; // Left click up code
SendMessage(handle, downCode, wParam, lParam); // Mouse button down
SendMessage(handle, upCode, wParam, lParam); // Mouse button up
}
}
return true;
}
EnumChildWindows(webBrowser1.Handle, new EnumChildrenCallback(EnumChildWindowsCallback), IntPtr.Zero);//调用

网页中的flash插件如果是设计的时候插进去的元素,而可以取出来MacromediaFlashPlayerActiveX
如果flash的object元素是用javascript动态产生的,用spy++查看那就没有flash句柄了,以上函数也取不出来

实在不行,我就想得到flash相对于屏幕的坐标,然后设置鼠标位置并模拟单击,这个怎么实现
...全文
1187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengxuan 2011-01-07
  • 打赏
  • 举报
回复
刚才我已经能够计算出flash的屏幕坐标,并且可以实现设置鼠标位置并单击
但是为什么javascript动态产生的flash元素<object></object>用spy++就没有句柄呢
pengxuan 2011-01-07
  • 打赏
  • 举报
回复
webbrowser中获取网页元素我会((webBrowser1.Document.DomDocument) as HTMLDocument).getElementById("obj1")
这里的obj1就是flash的id
可这获取的元素不能转成flash元素,又不能实现单击
lufy_king 2011-01-07
  • 打赏
  • 举报
回复
1.取Flash对象以及其坐标,最好是通过Dom接口。如何操作WebBrowser中的DOM你另外查一下。
2.标识Flash对象,最好是直接用Flash的ID,不要使用类。因为如何有多个FLASH你怎么办?(如果没有指定ID,向开发提一下需求)
3.获取FLASH对象的坐标,也可以通过在WebBrowser中执行JS函数:getBoundingClientRect
4.注意:取屏幕绝对坐标是元素坐标与BROWSER客户区域绝对坐标运算得到。
5.点击操作是:通过/65535换算后,使用Mouse_event实现。

110,586

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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