当前位置:C++技术网 > 资讯 > 怎么能找到一个网页中的FLASH内部的按钮句柄呢?

怎么能找到一个网页中的FLASH内部的按钮句柄呢?

更新时间:2016-09-01 09:50:37浏览次数:1+次

怎么能找到一个网页中的FLASH内部的按钮句柄呢?

C++技术网解答:

首先请看:Flash Player内部机制

当然,看不懂没有关系,简单总结下:

渲染器如果基于显示列表生成屏幕上的像素?

第一步是视频解码。

第二步,分解显示列表,基于形状生成全局边缘列表,然后为栅格器优化

第三步,扫描边缘(Edges),逐行生成屏幕上的像素值,存储在缓冲区内。

第四步,将最终合成的位图交给浏览器展现在屏幕上。

最后的效果是这样的:

怎么能找到一个网页中的FLASH内部的按钮句柄呢?

    最终Flash展示出来的是位图,所有看到的都是位图。实际上,这个就是Direct UI。

    通过Spy++(使用方法参见:窗口跟踪神器Spy++和窗口反跟踪技术DirectUI的整体分析)对优酷网页的Flash播放器进行抓取,得到下面的结果:

通过SPY++对优酷网页的Flash播放器进行抓取

    只看到整个Flash播放器有一个句柄,Flash内部以及网页其他部分全部都无法抓取。

    原因在于,Flash程序和网页程序实际上都是Direct UI,当然,Flash嵌入到网页时,Flash整个作为一个控件,所以Flash整个元素是可以抓取到句柄的。网页的其他元素和Flash内部的各种元素包括菜单,都是无法抓取的,因为他们只是图像而已,不是控件。有句柄的控件是Windows窗口,这里抓取不到的是直接的渲染图像。

    所以企图想找到一个网页中的FLASH内部的按钮句柄,这个是徒劳无功的。因为很多人并不了解Flash机制,不了解Direct UI技术,所以出现盲点,还在网上到处寻找,都没有结果。因为本来就不能,所以能找到的都是解决问题的幻象和问题。我希望这个问题在我们站终结。

    Direct UI技术,请阅读:DirectUI技术背景详解和DirectUI原理简介

    当然,无法获取Flash内部元素的句柄,或者更准确的说,Flash内部元素压根就没有句柄。是不是就没有办法与Flash交互了呢?当然不是。因为Flash是基于ActiveX组件嵌入在浏览器的,ActiveX组件就是COM组件,如果要操作,可以通过COM组件接口来实现。网上一些实现方案,也就是基于COM接口来实现的,而不是所谓的句柄。

    网上大量的提问,没有解答,甚至是误导,解答了的人,也是不知所以然,所以更加误导人。大家看到他实现了,所以深信不疑,殊不知,做出来不一定懂,毕竟网上可以找到很多代码。你懂得。

    我们不提供具体实现,在大体方向指一条路,不让走弯路。自己去探索吧。