WPF效果第二百三十四篇之获取系统版本

由于项目的需要,简单实现了一下获取系统版本的小功能;今天就来分享一下几种获取的方式;

①使用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下效果:

5adf840f9edb475c21afe25bf4927e24.png

⑥在Windows 11下效果:

2ad909732d83c2cb38fe82f629ca3ca1.png

需要注意的是,第一种方式在Windows 10需要配置app.manifest:

9538c2e41cbbeea5f1258291e1134e8b.png

最终简单效果就这么完事了;以后有时间的话,可以再去摸索一下更复杂的效果eae6376164b704b0a805766aae7af8a7.png;编程不息、Bug不止、无Bug、无生活b8ff0925c6d75c415bf674e5bc7851be.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值