2 using System.Collections.Generic;
4 using System.Management;
8 public static class COS
11 /// OSがXP以前ならfalse, Vista以降ならtrueを返す
13 /// <returns></returns>
14 public static bool bIsVistaOrLater
18 return bCheckOSVersion(6, 0);
22 /// OSがVista以前ならfalse, Win7以降ならtrueを返す
24 /// <returns></returns>
25 public static bool bIsWin7OrLater
29 return bCheckOSVersion(6, 1);
33 /// OSがWin7以前ならfalse, Win8以降ならtrueを返す
35 /// <returns></returns>
36 public static bool bIsWin8OrLater
40 return bCheckOSVersion(6, 2);
44 /// OSがWin8.1以前ならfalse, Win10以降ならtrueを返す
46 /// <returns></returns>
47 public static bool bIsWin10OrLater
51 return bCheckOSVersion(10, 0);
57 /// 指定のOSバージョン以上であればtrueを返す
59 private static bool bCheckOSVersion(int major, int minor)
62 //System.OperatingSystem os = System.Environment.OSVersion;
63 //if (os.Platform != PlatformID.Win32NT) // NT系でなければ、XP以前か、PC Windows系以外のOS。
67 //var mmb = tpGetOSVersion();
68 int _major, _minor, _build;
69 tpGetOSVersion(out _major, out _minor, out _build);
71 //if (os.Version.Major >= major && os.Version.Minor >= minor)
76 else if (_major == major && _minor >= minor)
87 //public static (int major, int minor, int build) tpGetOSVersion()
88 public static void tpGetOSVersion(out int major, out int minor, out int build)
90 //var result = (major: 0, minor: 0, build: 0);
95 System.Management.ManagementClass mc =
96 new System.Management.ManagementClass("Win32_OperatingSystem");
97 System.Management.ManagementObjectCollection moc = mc.GetInstances();
99 foreach (System.Management.ManagementObject mo in moc)
101 string ver = mo["Version"].ToString();
102 string[] majorminor = ver.Split(new char[] { '.' }, StringSplitOptions.None);
104 major = Convert.ToInt32(majorminor[0]);
105 minor = Convert.ToInt32(majorminor[1]);
106 build = Convert.ToInt32(mo["BuildNumber"]);
108 break; // 1回ループで終了(でいいよね)
115 public enum WIN10BUILD : int
125 private static WIN10BUILD GetWin10BuildNumber()
127 WIN10BUILD ret = WIN10BUILD.UNKNOWN;
129 //var mmb = tpGetOSVersion();
130 int major, minor, build;
131 tpGetOSVersion(out major, out minor, out build);
135 ret = WIN10BUILD.NOTWIN10;
137 else if ((build != (int)WIN10BUILD.TH1) &&
138 (build != (int)WIN10BUILD.TH2) &&
139 (build != (int)WIN10BUILD.RS1) &&
140 (build != (int)WIN10BUILD.RS2) &&
141 (build != (int)WIN10BUILD.RS3)
144 ret = (WIN10BUILD)build;
148 ret = WIN10BUILD.UNKNOWN;