如何在我的机器上用C#编写代码以获得直接的X版本
本文关键字:版本 代码 我的 机器 | 更新日期: 2023-09-27 17:57:56
我想知道当用户单击菜单项时,他应该能够知道机器上安装的直接X版本?
我想在VS2008中用C#对此进行编码。
我应该在菜单项单击事件中写些什么?我是C#的初学者,所以不知道从哪里开始。。
有人能帮忙吗?谢谢
这可能会有所帮助:.NET如何检测是否支持DirectX 10?。
编辑:
下面是一些我认为更好的代码。我能想到的最好的办法是在DX10或DX11的情况下,基于Windows版本进行检查。这不是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;
}
发现这个问题链接到另一个问题中,但我发现解决方案不起作用,所以我发布了如何解决这个问题的想法。但要小心:它非常非常慢。
EDIT:删除了注册表检查方法,因为它只适用于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]);
}