如何在C#中在我的机器上获得直接X版本的代码?

我想知道当用户点击菜单项时,他应该能够知道他的机器上安装的直接X版本吗?

我想在VS2008中用C#编写代码。

我应该在菜单项点击事件中写什么? 我是C#的初学者,所以不知道从哪里开始..

任何人都可以帮忙吗? 谢谢..

这可能会有所帮助: .NET如何检测是否支持DirectX 10? 。

编辑:

下面是一些我认为更好的代码。 我能想到的最好的是基于Windows版本的DX10或DX11检查。 这不是100%准确(因为Vista可以升级到DX11,但我没有检查这个),但总比没有好。

private int GetDirectxMajorVersion() { 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; } } } } } return directxMajorVersion; } 

发现这个问题链接在另一个但我看到解决方案没有影响,所以我发布了如何解决问题的想法。 但要注意:它非常非常慢。

编辑:删除注册表检查方法,因为它只适用于Dx <= 9(thx @Telanor)

这种方法非常非常慢,但只有一个我认为100%准确

 private static int checkdxversion_dxdiag() { Process.Start("dxdiag", "/x dxv.xml"); while (!File.Exists("dxv.xml")) Thread.Sleep(1000); XmlDocument doc = new XmlDocument(); doc.Load("dxv.xml"); XmlNode dxd = doc.SelectSingleNode("//DxDiag"); XmlNode dxv = dxd.SelectSingleNode("//DirectXVersion"); return Convert.ToInt32(dxv.InnerText.Split(' ')[1]); }