OSDN Git Service

機能強化
[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                         get
17                         {
18                                 return bCheckOSVersion(6, 0);
19                         }
20                 }
21                 /// <summary>
22                 /// OSがVista以前ならfalse, Win7以降ならtrueを返す
23                 /// </summary>
24                 /// <returns></returns>
25                 public static bool bIsWin7OrLater
26                 {
27                         get
28                         {
29                                 return bCheckOSVersion(6, 1);
30                         }
31                 }
32                 /// <summary>
33                 /// OSがWin7以前ならfalse, Win8以降ならtrueを返す
34                 /// </summary>
35                 /// <returns></returns>
36                 public static bool bIsWin8OrLater
37                 {
38                         get
39                         {
40                                 return bCheckOSVersion(6, 2);
41                         }
42                 }
43                 /// <summary>
44                 /// OSがWin8.1以前ならfalse, Win10以降ならtrueを返す
45                 /// </summary>
46                 /// <returns></returns>
47                 public static bool bIsWin10OrLater
48                 {
49                         get
50                         {
51                                 return bCheckOSVersion(10, 0);
52                         }
53                 }
54
55
56                 /// <summary>
57                 /// 指定のOSバージョン以上であればtrueを返す
58                 /// </summary>
59                 private static bool bCheckOSVersion(int major, int minor)
60                 {
61                         //プラットフォームの取得
62                         //System.OperatingSystem os = System.Environment.OSVersion;
63                         //if (os.Platform != PlatformID.Win32NT)      // NT系でなければ、XP以前か、PC Windows系以外のOS。
64                         //{
65                         //      return false;
66                         //}
67                         //var mmb = tpGetOSVersion();
68                         int _major, _minor, _build;
69                         tpGetOSVersion(out _major, out _minor, out _build);
70
71                         //if (os.Version.Major >= major && os.Version.Minor >= minor)
72                         if (_major > major)
73                         {
74                                 return true;
75                         }
76                         else if (_major == major && _minor >= minor)
77                         {
78                                 return true;
79                         }
80                         else
81                         {
82                                 return false;
83                         }
84                 }
85
86
87                 //public static (int major, int minor, int build) tpGetOSVersion()
88                 public static void tpGetOSVersion(out int major, out int minor, out int build)
89                 {
90                         //var result = (major: 0, minor: 0, build: 0);
91                         major = 0;
92                         minor = 0;
93                         build = 0;
94
95                         System.Management.ManagementClass mc =
96                                 new System.Management.ManagementClass("Win32_OperatingSystem");
97                         System.Management.ManagementObjectCollection moc = mc.GetInstances();
98
99                         foreach (System.Management.ManagementObject mo in moc)
100                         {
101                                 string ver = mo["Version"].ToString();
102                                 string[] majorminor = ver.Split(new char[] { '.' }, StringSplitOptions.None);
103
104                                 major = Convert.ToInt32(majorminor[0]);
105                                 minor = Convert.ToInt32(majorminor[1]);
106                                 build = Convert.ToInt32(mo["BuildNumber"]);
107
108                                 break;  // 1回ループで終了(でいいよね)
109                         }
110                         moc.Dispose();
111                         mc.Dispose();
112
113                         //return result;
114                 }
115                 public enum WIN10BUILD : int
116                 {
117                         TH1 = 10240,
118                         TH2 = 10586,
119                         RS1 = 14393,
120                         RS2 = 15063,
121                         RS3 = 16299,
122                         UNKNOWN = 999999,
123                         NOTWIN10 = 0
124                 }
125                 private static WIN10BUILD GetWin10BuildNumber()
126                 {
127                         WIN10BUILD ret = WIN10BUILD.UNKNOWN;
128
129                         //var mmb = tpGetOSVersion();
130                         int major, minor, build;
131                         tpGetOSVersion(out major, out minor, out build);
132
133                         if (major != 10)
134                         {
135                                 ret = WIN10BUILD.NOTWIN10;
136                         }
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)
142                         )
143                         {
144                                 ret = (WIN10BUILD)build;
145                         }
146                         else
147                         {
148                                 ret = WIN10BUILD.UNKNOWN;
149                         }
150
151                         return ret;
152                 }
153         }
154 }