【问题标题】:Cursor disappears on bitblt光标在 bitblt 上消失
【发布时间】:2016-06-21 15:27:39
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: windows cursor screenshot bitblt


    【解决方案1】:

    使用镜像驱动怎么样?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当然没有管理员权限是无法安装驱动的;如果您有 SeLoadDriver 权限,您可以加载一个驱动程序,将您的用户添加到管理员组!
      【解决方案3】:

      只需分别复制屏幕和光标并覆盖它们。

      【讨论】:

        【解决方案4】:

        我必须克服闪烁的想法是“手动”绘制“您自己的鼠标副本”,然后进行 BitBlt 调用,或者仅使用 SRCCOPY 调用 BitBlt,然后手动捕获顶部上方的任何可见透明窗口它。我不知道商业的东西是如何做到的(或者 windows 媒体编码器显然是这样做的)。

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

        【讨论】:

          【解决方案5】:

          您可以在 windows vista 或更高版本中使用放大 API。 我在 windows xp 中找不到好主意。

          【讨论】:

          • 这应该是一条评论
          猜你喜欢
          • 2012-08-16
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多