光标在bitblt上消失

时间:2009-08-04 18:54:13

标签: windows cursor screenshot bitblt

我有一个Windows应用程序,可以从屏幕上抓取像素进行录制(以视频的形式)到自定义屏幕共享格式。问题是在使用软件光标的机器上,使用SRCCOPY | CAPTUREBLIT从屏幕进行blitting(以便分层窗口也显示在图像中)会导致光标闪烁,如Case of the Disappearing Cursor中所述。

对于单屏幕拍摄,这不是问题,但是当快速连续拍摄多个屏幕截图时,光标会快速闪烁,有时似乎完全消失。

我已经研究过使用Windows Media Encoder SDK(如代码项目文章中所述,见下文),因为它不会导致光标闪烁,但似乎无法直接访问帧数据。不幸的是,实时编码和自定义格式都是要求,这使得Windows Media Encoder无法用于此目的。

我也尝试过DirectX方式(在同一篇文章中描述,见下文),它似乎也遇到了同样的问题。

还有其他人遇到过这个问题吗?必须有办法绕过它 - 许多商业屏幕共享程序都没有这样的问题。

文章:www.codeproject.com/KB/dialog/screencap.aspx

5 个答案:

答案 0 :(得分:0)

使用镜像驱动程序怎么样?

答案 1 :(得分:0)

你是对的,镜子肯定会起作用。但是,目前,我正试图远离这种方法,因为在没有管理员权限的用户下安装时存在安全性和权限问题。如果我错了,请纠正我,但我认为没有任何方法可以安装没有这些权利的驱动程序。除此之外,似乎这将是不必要的复杂:应该是一种更简单/侵入性更小的方法。 (我应该在原来的问题中提到这一点)

答案 2 :(得分:0)

我必须克服闪烁的想法是“手动”绘制“你自己的鼠标副本”,然后进行BitBlt调用,或者只用SRCCOPY调用BitBlt然后手动捕获顶部的任何可见透明窗口它。我不知道商业广告是怎么做的(或者Windows媒体编码器显然是这样做的。)

参考:http://us.generation-nt.com/xp-bitblt-captureblt-option-help-26970632.html

答案 3 :(得分:0)

只需单独复制屏幕和光标并叠加它们。

答案 4 :(得分:0)

您可以在Windows Vista或更高版本中使用Magnification API。 我在Windows XP中找不到好主意。