由于项目的需要,简单实现了一下获取系统版本的小功能;今天就来分享一下几种获取的方式;
①使用OSVersion的方式:
public string GetOperatingSystemByOSVersion()
{
string systemStr = "Unknown";
var os = Environment.OSVersion;
var platform = os.Platform;
//Windows系统的话
if(platform == PlatformID.Win32NT)
{
var version = os.Version;
if(version.Major == 6 && version.Minor == 1)
{
systemStr = "Windows 7";
}
else if(version.Major == 10)
{
systemStr = "Windows 10";
}
else
{
systemStr = "Unknown";
}
}
return systemStr;
}
②使用注册表的方式:
public string GetWindowsVersionByRegistry()
{
var registry = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
string productName = (string) registry.GetValue("ProductName");
if(productName != null)
{
if(productName.StartsWith("Windows 10"))
{
string currentBuild = (string) registry.GetValue("CurrentBuild");
if(currentBuild != null && int.Parse(currentBuild) >= 22000)
{
productName = "Windows11";
}
else
{
productName = "Windows10";
}
}
else if(productName.StartsWith("Windows 8"))
{
productName = "Windows8";
}
else if(productName.StartsWith("Windows 7"))
{
productName = "Windows7";
}
}
return productName;
}
③使用Version Helper API的方式:
[DllImport("ntdll.dll")]
public static extern int RtlGetVersion(ref OSVERSIONINFOEXW lpVersionInformation);
public string GetWindowsVersionByVersionHelperAPI()
{
string systemStr = "Unknown";
OSVERSIONINFOEXW osVersionInfo = new OSVERSIONINFOEXW();
osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(osVersionInfo);
RtlGetVersion(ref osVersionInfo);
if(osVersionInfo.dwMajorVersion == 10)
{
if(osVersionInfo.dwBuildNumber >= 22000)
{
systemStr = "Windows 11";
}
else
{
systemStr = "Windows 10";
}
}
else if(osVersionInfo.dwMajorVersion == 6)
{
if(osVersionInfo.dwMinorVersion == 3)
{
systemStr = "Windows 8.1";
}
else if(osVersionInfo.dwMinorVersion == 2)
{
systemStr = "Windows 8";
}
else if(osVersionInfo.dwMinorVersion == 1)
{
systemStr = "Windows 7";
}
}
else
{
systemStr = "Unknown";
}
return systemStr;
}
关于结构体OSVERSIONINFOEXW参考链接:
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
④使用WMI的方式:
public string GetWindowsVersionByWMI()
{
string systemStr = "Unknown";
foreach(var o in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get())
{
var obj = (ManagementObject) o;
var caption = obj.GetPropertyValue("Caption");
var vv = obj.GetPropertyValue("Version");
systemStr = $ "{caption}{vv}";
break;
}
return systemStr;
}
⑤在Windows 10下效果:
⑥在Windows 11下效果:
需要注意的是,第一种方式在Windows 10需要配置app.manifest:
最终简单效果就这么完事了;以后有时间的话,可以再去摸索一下更复杂的效果;编程不息、Bug不止、无Bug、无生活
;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!