2013-04-11 97 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(); 
    }