d3d9 GetFrontBufferData 中没有鼠标光标

No mouse cursor in d3d9 GetFrontBufferData

我正在编写一个屏幕捕获应用程序。屏幕是使用 Direct3d 9 API 捕获的,输出媒体文件是使用 Windows Media Foundation h264 编解码器编写的。

该应用程序必须适用于从 7 开始的所有 Windows 版本。因此,选择了 d3d9 API。

使用 GetFrontBufferData() 方法捕获图像。

一切正常,除了没有捕获鼠标光标。

我该如何解决这个问题?

这是意料之中的(光标未呈现到调用 GetFrontBufferData 时引用的显示表面)。您必须手动进行合成:

  1. 通过调用 GetCursor 检索当前光标形状。
  2. 通过调用 GetCursorPos.
  3. 检索当前光标位置
  4. 通过调用GetIconInfo找到光标的热点。热点是第4步渲染时偏移光标所必需的
  5. 通过调用 DrawIconEx 渲染光标。如果检索 HDC 不可行,您还可以手动将光标信息写入前台缓冲区(tedios,但也不完全复杂)。