d3d9 GetFrontBufferData 中没有鼠标光标
No mouse cursor in d3d9 GetFrontBufferData
我正在编写一个屏幕捕获应用程序。屏幕是使用 Direct3d 9 API 捕获的,输出媒体文件是使用 Windows Media Foundation h264 编解码器编写的。
该应用程序必须适用于从 7 开始的所有 Windows 版本。因此,选择了 d3d9 API。
使用 GetFrontBufferData() 方法捕获图像。
一切正常,除了没有捕获鼠标光标。
我该如何解决这个问题?
这是意料之中的(光标未呈现到调用 GetFrontBufferData
时引用的显示表面)。您必须手动进行合成:
- 通过调用 GetCursor 检索当前光标形状。
- 通过调用 GetCursorPos.
检索当前光标位置
- 通过调用GetIconInfo找到光标的热点。热点是第4步渲染时偏移光标所必需的
- 通过调用 DrawIconEx 渲染光标。如果检索
HDC
不可行,您还可以手动将光标信息写入前台缓冲区(tedios,但也不完全复杂)。
我正在编写一个屏幕捕获应用程序。屏幕是使用 Direct3d 9 API 捕获的,输出媒体文件是使用 Windows Media Foundation h264 编解码器编写的。
该应用程序必须适用于从 7 开始的所有 Windows 版本。因此,选择了 d3d9 API。
使用 GetFrontBufferData() 方法捕获图像。
一切正常,除了没有捕获鼠标光标。
我该如何解决这个问题?
这是意料之中的(光标未呈现到调用 GetFrontBufferData
时引用的显示表面)。您必须手动进行合成:
- 通过调用 GetCursor 检索当前光标形状。
- 通过调用 GetCursorPos. 检索当前光标位置
- 通过调用GetIconInfo找到光标的热点。热点是第4步渲染时偏移光标所必需的
- 通过调用 DrawIconEx 渲染光标。如果检索
HDC
不可行,您还可以手动将光标信息写入前台缓冲区(tedios,但也不完全复杂)。