OSDN Git Service

acaee25ecfb051dd37d6cdb82662adec68005363
[dtxmania/dtxmania.git] / FDK / コード / 00.共通 / COS.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Management;
5
6 namespace FDK
7 {
8         public static class COS
9         {
10                 /// <summary>
11                 /// OSがXP以前ならfalse, Vista以降ならtrueを返す
12                 /// </summary>
13                 /// <returns></returns>
14                 public static bool bIsVistaOrLater()
15                 {
16                         return bCheckOSVersion(6, 0);
17                 }
18                 /// <summary>
19                 /// OSがVista以前ならfalse, Win7以降ならtrueを返す
20                 /// </summary>
21                 /// <returns></returns>
22                 public static bool bIsWin7OrLater()
23                 {
24                         return bCheckOSVersion(6, 1);
25                 }
26                 /// <summary>
27                 /// OSがWin7以前ならfalse, Win8以降ならtrueを返す
28                 /// </summary>
29                 /// <returns></returns>
30                 public static bool bIsWin8OrLater()
31                 {
32                         return bCheckOSVersion(6, 2);
33                 }
34                 /// <summary>
35                 /// OSがWin10以前ならfalse, Win10以降ならtrueを返す
36                 /// </summary>
37                 /// <returns></returns>
38                 public static bool bIsWin10OrLater()
39                 {
40                         return bCheckOSVersion(10, 0);
41                 }
42                 /// <summary>
43                 /// OSがWin10以降、かつ指定build以降ならtrueを返す
44                 /// </summary>
45                 /// <returns></returns>
46                 public static bool bIsWin10OrLater(WIN10BUILD build)
47                 {
48                         if (bCheckOSVersion(10, 0))
49                         {
50                                 if ( GetWin10BuildNumber() >= build )
51                                 {
52                                         return true;
53                                 }
54                                 else
55                                 {
56                                         return false;
57                                 }
58                         }
59                         else
60                         {
61                                 return false;
62                         };
63                 }
64
65
66                 /// <summary>
67                 /// 指定のOSバージョン以上であればtrueを返す
68                 /// </summary>
69                 private static bool bCheckOSVersion(int major, int minor)
70                 {
71                         //プラットフォームの取得
72                         //System.OperatingSystem os = System.Environment.OSVersion;
73                         //if (os.Platform != PlatformID.Win32NT)      // NT系でなければ、XP以前か、PC Windows系以外のOS。
74                         //{
75                         //      return false;
76                         //}
77                         //var mmb = tpGetOSVersion();
78                         int _major, _minor, _build;
79                         tpGetOSVersion(out _major, out _minor, out _build);
80
81                         //if (os.Version.Major >= major && os.Version.Minor >= minor)
82                         if (_major > major)
83                         {
84                                 return true;
85                         }
86                         else if (_major == major && _minor >= minor)
87                         {
88                                 return true;
89                         }
90                         else
91                         {
92                                 return false;
93                         }
94                 }
95
96
97                 //public static (int major, int minor, int build) tpGetOSVersion()
98                 public static void tpGetOSVersion(out int major, out int minor, out int build)
99                 {
100                         //var result = (major: 0, minor: 0, build: 0);
101                         major = 0;
102                         minor = 0;
103                         build = 0;
104
105                         System.Management.ManagementClass mc =
106                                 new System.Management.ManagementClass("Win32_OperatingSystem");
107                         System.Management.ManagementObjectCollection moc = mc.GetInstances();
108
109                         foreach (System.Management.ManagementObject mo in moc)
110                         {
111                                 string ver = mo["Version"].ToString();
112                                 string[] majorminor = ver.Split(new char[] { '.' }, StringSplitOptions.None);
113
114                                 major = Convert.ToInt32(majorminor[0]);
115                                 minor = Convert.ToInt32(majorminor[1]);
116                                 build = Convert.ToInt32(mo["BuildNumber"]);
117
118                                 break;  // 1回ループで終了(でいいよね)
119                         }
120                         moc.Dispose();
121                         mc.Dispose();
122
123                         //return result;
124                 }
125                 public enum WIN10BUILD : int
126                 {
127                         TH1 = 10240,    // 1507: 
128                         TH2 = 10586,    // 1511: November Update
129                         RS1 = 14393,    // 1607: Anniversary Update
130                         RS2 = 15063,    // 1703: Creators Update
131                         RS3 = 16299,    // 1709: Fall Creators Update
132                         RS4 = 17134,    // 1803: April 2018 Update
133             RS5 = 17763,        // 1809: October 2018 Update
134             _19H1 = 18362,      // 1903: May 2019 Update
135                         UNKNOWN  = -1,
136                         NOTWIN10 = 0
137                 }
138                 public static WIN10BUILD GetWin10BuildNumber()
139                 {
140                         WIN10BUILD ret = WIN10BUILD.UNKNOWN;
141
142                         //var mmb = tpGetOSVersion();
143                         int major, minor, build;
144                         tpGetOSVersion(out major, out minor, out build);
145
146                         if (major != 10)
147                         {
148                                 ret = WIN10BUILD.NOTWIN10;
149                         }
150                         else
151                         {
152                                 ret = (WIN10BUILD)build;
153                         }
154
155                         return ret;
156                 }
157         }
158 }