2013-04-11 2 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

+0

어떤 버전의 DirectX와 어떤 OS가 필요합니까? 어쨌든 DX10과 DX11은 Windows 7과 Windows 8의 일부입니다. –

+0

Windows XPfessional SP 3에서 버전 9.0c가 필요합니다. 그러나 소프트웨어가 win XP에 설치되어 Vista를 얻고 7을 획득 할 수 있습니다. 따라서 더 많은 DX 버전을 확인해야한다고 생각합니다. 맞습니까? – Maxim

답변

0

시스템에 DirectX 호환 GPU가 있는지 검색하여 일부 가상 운영 체제에서는 그렇지 않은 Direct3D9 장치를 만들 수 있습니까? 그 중 하나는 장치 인스턴스를 생성하고 그것이 던질 가능성이있는 예외를 잡음으로써 간단히 테스트 할 수 있습니다.

DirectX 설치 여부 자체는 Windows \ System32 폴더를 살펴보면 확인할 수 있습니다. 예를 들어, d3d9d.dll 및 D3DX9_43.dll을 확인하십시오.

+0

답변 해 주셔서 감사합니다. 장치 인스턴스를 만드는 테스트는 좋은 생각입니다. "dxdiag"를 실행하여 DirectX 버전을 확인할 수도 있습니다. – Maxim

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(); 
    } 
관련 문제