2013-04-11 100 views
0

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

你有一个想法如何做到这一点?

谢谢你的帮助!

+0

阅读:http://stackoverflow.com/questions/3255094/minimum-directx-9-0c-version-and-how-to- check-for-it – Andy 2013-04-11 12:37:46

+0

你需要哪个版本的DirectX和哪个操作系统?请记住,DX10和DX11无论如何都是Windows 7和Windows 8的一部分。 – 2013-04-11 12:48:28

+0

我需要Windows XPfessional SP 3中的版本9.0c。但是该软件可以安装在win xp,win vista和win 7上。因此,我认为我必须检查多个DX版本。是不是? – Maxim 2013-04-11 12:58:30

回答

0

您是否需要检测系统中是否存在与DirectX兼容的GPU,以便可以创建Direct3D9设备,而某些虚拟操作系统则不是这种情况?可以简单地通过创建设备实例并捕获它可能抛出的异常来测试这一点。

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

+0

谢谢你的回答。创建设备实例的测试是一个好主意。 您也可以通过执行“dxdiag”来检查DirectX版本。 – Maxim 2013-04-12 06:59:05

0

另一种方式来获得的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(); 
    }