【问题标题】:How to check whether DirectX is available?如何检查 DirectX 是否可用?
【发布时间】:2013-04-03 15:47:38
【问题描述】:

目前我用 C# 开发一个项目。在这个项目中,我使用 DirectX API。现在我想实现一个函数来检查 DirectX 是否可用?

你知道怎么做吗?

感谢您的帮助!

【问题讨论】:

  • 您需要哪个版本的 DirectX 和哪个操作系统?请记住,DX10 和 DX11 无论如何都是 Windows 7 和 Windows 8 的一部分。
  • 我需要Windows XPfessional SP 3的9.0c版本。但是该软件可以安装在win xp、win vista和win 7上。因此我认为我必须检查一个以上的DX版本。 . 对吗?

标签: c# error-handling directx try-catch direct3d


【解决方案1】:

是否需要检测系统中是否有兼容 DirectX 的 GPU,以便创建 Direct3D9 设备,某些虚拟操作系统等不是这样?只需创建一个设备实例并捕获它可能抛出的异常即可对其进行测试。

DirectX 安装本身可以通过查看 Windows\System32 文件夹来检查。例如,检查 d3d9d.dll 和 D3DX9_43.dll。

【讨论】:

  • 感谢您的回答。创建设备实例的测试是个好主意。您也可以通过执行“dxdiag”来检查 DirectX 版本。
【解决方案2】:

获取 DirectX 的另一种方法 - 版本:

    void CheckDirectXMajorVersion()
    {
        int directxMajorVersion = 0;

        var OSVersion = Environment.OSVersion;

        // if Windows Vista or later
        if (OSVersion.Version.Major >= 6)
        {
            // if Windows 7 or later
            if (OSVersion.Version.Major > 6 || OSVersion.Version.Minor >= 1)
            {
                directxMajorVersion = 11;
            }
            // if Windows Vista
            else
            {
                directxMajorVersion = 10;
            }
        }
        // if Windows XP or earlier.
        else
        {
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\DirectX"))
            {
                string versionStr = key.GetValue("Version") as string;
                if (!string.IsNullOrEmpty(versionStr))
                {
                    var versionComponents = versionStr.Split('.');
                    if (versionComponents.Length > 1)
                    {
                        int directXLevel;
                        if (int.TryParse(versionComponents[1], out directXLevel))
                        {
                            directxMajorVersion = directXLevel;
                        }
                    }
                }
            }
        }

        Console.WriteLine("DirectX Version: " + directxMajorVersion.ToString());

        Console.ReadKey();
    }

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多