有几种方法.
(1)屏幕轮询.
你可以轮询屏幕(也就是说,创建一个DIB,BitBlt从屏幕到它的每个时间段),然后按原样发送它
优点:
缺点:
(2)与上面相同,除了现在您对轮询的屏幕进行一些分析以查看差异.然后你可以只发送差异(如果没有变化,显然不发送任何东西),另外你可以选择压缩差异流.
优点:
缺点:
(3)与上述相同,但不要经常轮询屏幕.相反,你会为你的控件做一些挂钩(比如监视控件收到的Windows消息).然后,您尝试了解您的控件何时应重绘,并仅在这些场景中进行屏幕轮询.
优点:
缺点:
(4)较低级别的挂钩:拦截对绘图功能的调用.由于在用户模式中存在大量此类功能 - 这样做的唯一现实可能性是内核模式.
您可以编写虚拟视频驱动程序("镜像"视频驱动程序,或挂钩现有的驱动程序)以接收系统中的所有绘图.然后,只要您收到特定区域的绘图请求,您就会知道它已被更改.
优点:
缺点:
(5)继续开发驱动程序.只要您现在知道调用哪些绘图函数 - 您现在可以切换策略.而不是"记住"脏区并在那里轮询屏幕 - 你可能只是"记住"用所有参数调用的绘图函数,然后在主机端"重复"它.
通过这样你根本不必轮询屏幕.你使用"矢量"方法(而不是"光栅").
然而,这实现起来要复杂得多.一些绘图函数将另一个位图作为参数,然后使用其他绘图函数等绘制.您将需要监视位图和屏幕.
优点:
缺点:
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |