Win32:如何确定DirectDraw是否已启用?

Ian*_*oyd 5 winapi gdi+ directdraw

CachedBitmapsGDIPlus中使用时,如果Windows视频"硬件加速"降低太多,则会出现图形损坏 - 这样会禁用DirectDraw:

在此输入图像描述

硬件加速有六个级别:

  • 禁用所有加速度
  • 禁用除基本加速之外的所有加速 (服务器机器上的默认值)
  • 禁用所有DirectDraw和Direct3D加速,以及所有光标和高级加速
  • 禁用所有光标和高级绘图加速
  • 禁用光标和位图加速
  • 启用所有加速(桌面计算机上的默认值)

如果禁用DirectDraw,则DrawCachedBitmap在GDI +中使用将导致图形损坏.DrawImage()如果没有启用DirectDraw ,我很容易使用较慢的API - 但我必须能够检测到DirectDraw被禁用.

我如何以编程方式检查是否启用了DirectDraw


问题是:dxdiag如何做到这一点:

替代文字

也可以看看

KB191660 - DirectDraw或Direct3D选项不可用 (存档)

rwi*_*ams 0

您可以检查注册表中的加速度滑块值。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{'some hex string'}\0000\Acceleration.Level
Run Code Online (Sandbox Code Playgroud)

您可能必须遍历所有文件夹,Video因为通常有多个条目。

加速级别值

  • 5禁用所有加速
  • 4禁用除基本加速之外的所有加速。(服务器机器上的默认值)
  • 3禁用所有 DirectDraw 和 Direct3D 加速,以及所有光标和高级加速
  • 2禁用所有光标和高级绘图加速
  • 1禁用光标和位图加速
  • 0启用所有加速(台式机上的默认设置)

更新:

这是一个关于以编程方式更改/检查加速级别的旧线程。 http://www.autoitscript.com/forum/topic/61185-hardware-acceleration/