【转】【C#】判断当前操作系统

写一个判断操作系统的工具类OSHelper.cs

public class OSHelper
{
    // 获取操作系统ID
    public static System.PlatformID GetPlatformID()
    {
        //获取系统信息
        System.OperatingSystem osInfo = System.Environment.OSVersion;

        //获取操作系统ID
        System.PlatformID platformID = osInfo.Platform;

        return platformID;
    }

    // 获取主版本号
    public static int GetVersionMajor()
    {
        //获取系统信息
        System.OperatingSystem osInfo = System.Environment.OSVersion;

        //获取主版本号
        int versionMajor = osInfo.Version.Major;

        return versionMajor;
    }

    // 获取副版本号
    public static int GetVersionMinor()
    {
        //获取系统信息
        System.OperatingSystem osInfo = System.Environment.OSVersion;

        //获取副版本号
        int versionMinor = osInfo.Version.Minor;

        return versionMinor;
    }

    //C#判断操作系统是否为Windows98
    public static bool IsWindows98
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32Windows) && (Environment.OSVersion.Version.Minor == 10) && (Environment.OSVersion.Version.Revision.ToString() != "2222A");
        }
    }
    //C#判断操作系统是否为Windows98第二版
    public static bool IsWindows98Second
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32Windows) && (Environment.OSVersion.Version.Minor == 10) && (Environment.OSVersion.Version.Revision.ToString() == "2222A");
        }
    }
    //C#判断操作系统是否为Windows2000
    public static bool IsWindows2000
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 0);
        }
    }
    //C#判断操作系统是否为WindowsXP
    public static bool IsWindowsXP
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 1);
        }
    }
    //C#判断操作系统是否为Windows2003
    public static bool IsWindows2003
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 2);
        }
    }
    //C#判断操作系统是否为WindowsVista
    public static bool IsWindowsVista
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor == 0);
        }
    }
    //C#判断操作系统是否为Windows7
    public static bool IsWindows7
    {
        get
        {
            return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor == 1);
        }
    }
    //C#判断操作系统是否为Unix
    public static bool IsUnix
    {
        get
        {
            return Environment.OSVersion.Platform == PlatformID.Unix;
        }
    }
    //利用C#判断当前操作系统是否为Win8系统
    public static bool IsWindows8()
    {
        Version currentVersion = Environment.OSVersion.Version;
        Version compareToVersion = new Version("6.2");
        if (currentVersion.CompareTo(compareToVersion) >= 0)
            return true;
        else
            return false;
    }

}

问题来源:
做WPF的时候,发现部分UI在不同操作系统下的表现不一致,例如ListBox中的元素Item在Win10中水平间距自动平均分的,即指定了Item的宽高,但不指定Margin,会自动计算出Margin以平均间距,但是在Win8中不会如此,即所有Item靠左对齐,导致右边有一段空白。所以需要根据不同OS做UI的适配。

根据这一问题,解决办法是在XAML中ListBox使用< ListBox.ItemTemplate >< DataTemplate >,然后将Margin=”{Binding Margin}”使用MVVM绑定界面属性到ViewModel中,然后给ItemsSource绑定的列表中的实体类新增这个Margin属性(类型最好是Thickness,如果只有一个值也可以是int)。


重要的参考:

http://blog.csdn.net/yl2isoft/article/details/17336329
https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724834(v=vs.85).aspx

 

posted @ 2017-03-06 10:09  霍莉雪特  阅读(2149)  评论(0编辑  收藏  举报