using System; using System.Collections.Generic; using System.Text; using System.Management; namespace FDK { public static class COS { /// /// OSがXP以前ならfalse, Vista以降ならtrueを返す /// /// public static bool bIsVistaOrLater() { return bCheckOSVersion(6, 0); } /// /// OSがVista以前ならfalse, Win7以降ならtrueを返す /// /// public static bool bIsWin7OrLater() { return bCheckOSVersion(6, 1); } /// /// OSがWin7以前ならfalse, Win8以降ならtrueを返す /// /// public static bool bIsWin8OrLater() { return bCheckOSVersion(6, 2); } /// /// OSがWin10以前ならfalse, Win10以降ならtrueを返す /// /// public static bool bIsWin10OrLater() { return bCheckOSVersion(10, 0); } /// /// OSがWin10以降、かつ指定build以降ならtrueを返す /// /// public static bool bIsWin10OrLater(WIN10BUILD build) { if (bCheckOSVersion(10, 0)) { if ( GetWin10BuildNumber() >= build ) { return true; } else { return false; } } else { return false; }; } /// /// 指定のOSバージョン以上であればtrueを返す /// private static bool bCheckOSVersion(int major, int minor) { //プラットフォームの取得 //System.OperatingSystem os = System.Environment.OSVersion; //if (os.Platform != PlatformID.Win32NT) // NT系でなければ、XP以前か、PC Windows系以外のOS。 //{ // return false; //} //var mmb = tpGetOSVersion(); int _major, _minor, _build; tpGetOSVersion(out _major, out _minor, out _build); //if (os.Version.Major >= major && os.Version.Minor >= minor) if (_major > major) { return true; } else if (_major == major && _minor >= minor) { return true; } else { return false; } } //public static (int major, int minor, int build) tpGetOSVersion() public static void tpGetOSVersion(out int major, out int minor, out int build) { //var result = (major: 0, minor: 0, build: 0); major = 0; minor = 0; build = 0; System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_OperatingSystem"); System.Management.ManagementObjectCollection moc = mc.GetInstances(); foreach (System.Management.ManagementObject mo in moc) { string ver = mo["Version"].ToString(); string[] majorminor = ver.Split(new char[] { '.' }, StringSplitOptions.None); major = Convert.ToInt32(majorminor[0]); minor = Convert.ToInt32(majorminor[1]); build = Convert.ToInt32(mo["BuildNumber"]); break; // 1回ループで終了(でいいよね) } moc.Dispose(); mc.Dispose(); //return result; } public enum WIN10BUILD : int { TH1 = 10240, // 1507: TH2 = 10586, // 1511: November Update RS1 = 14393, // 1607: Anniversary Update RS2 = 15063, // 1703: Creators Update RS3 = 16299, // 1709: Fall Creators Update RS4 = 17134, // 1803: April 2018 Update RS5 = 17763, // 1809: October 2018 Update _19H1 = 18362, // 1903: May 2019 Update _19H2 = 18363, // 1909: November 2019 Update UNKNOWN = -1, NOTWIN10 = 0 } public static WIN10BUILD GetWin10BuildNumber() { WIN10BUILD ret = WIN10BUILD.UNKNOWN; //var mmb = tpGetOSVersion(); int major, minor, build; tpGetOSVersion(out major, out minor, out build); if (major != 10) { ret = WIN10BUILD.NOTWIN10; } else { ret = (WIN10BUILD)build; } return ret; } } }