Revision | 6686 (tree) |
---|---|
Time | 2017-04-14 16:07:34 |
Author | (del#1144) |
Windows バージョン判定関数をリファクタリング
@@ -1203,11 +1203,8 @@ | ||
1203 | 1203 | return pVerSetConditionMask(dwlConditionMask, dwTypeBitMask, dwConditionMask); |
1204 | 1204 | } |
1205 | 1205 | |
1206 | -// OSが Windows95 かどうかを判別する。 | |
1207 | -// | |
1208 | -// return TRUE: 95 | |
1209 | -// FALSE: Not 95 | |
1210 | -BOOL IsWindows95() | |
1206 | +// OSが 指定されたバージョンと等しい かどうかを判別する。 | |
1207 | +BOOL IsWindowsVer(DWORD dwPlatformId, DWORD dwMajorVersion, DWORD dwMinorVersion) | |
1211 | 1208 | { |
1212 | 1209 | OSVERSIONINFOEX osvi; |
1213 | 1210 | DWORDLONG dwlConditionMask = 0; |
@@ -1216,9 +1213,9 @@ | ||
1216 | 1213 | |
1217 | 1214 | ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); |
1218 | 1215 | osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); |
1219 | - osvi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; | |
1220 | - osvi.dwMajorVersion = 4; | |
1221 | - osvi.dwMinorVersion = 0; | |
1216 | + osvi.dwPlatformId = dwPlatformId; | |
1217 | + osvi.dwMajorVersion = dwMajorVersion; | |
1218 | + osvi.dwMinorVersion = dwMinorVersion; | |
1222 | 1219 | dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_PLATFORMID, op); |
1223 | 1220 | dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op); |
1224 | 1221 | dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op); |
@@ -1226,10 +1223,30 @@ | ||
1226 | 1223 | return (ret); |
1227 | 1224 | } |
1228 | 1225 | |
1226 | +// OSが 指定されたバージョン以降 かどうかを判別する。 | |
1227 | +// dwPlatformId を見ていないので NT カーネル内でしか比較できない | |
1228 | +// 5.0 以上で比較すること | |
1229 | +BOOL IsWindowsVerOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion) | |
1230 | +{ | |
1231 | + OSVERSIONINFOEX osvi; | |
1232 | + DWORDLONG dwlConditionMask = 0; | |
1233 | + int op = VER_GREATER_EQUAL; | |
1234 | + BOOL ret; | |
1235 | + | |
1236 | + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); | |
1237 | + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); | |
1238 | + osvi.dwMajorVersion = dwMajorVersion; | |
1239 | + osvi.dwMinorVersion = dwMinorVersion; | |
1240 | + dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op); | |
1241 | + dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op); | |
1242 | + ret = myVerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); | |
1243 | + return (ret); | |
1244 | +} | |
1245 | + | |
1229 | 1246 | // OSが WindowsNT カーネルかどうかを判別する。 |
1230 | 1247 | // |
1231 | 1248 | // return TRUE: NT kernel |
1232 | -// FALSE: Not NT4 kernel | |
1249 | +// FALSE: Not NT kernel | |
1233 | 1250 | BOOL IsWindowsNTKernel() |
1234 | 1251 | { |
1235 | 1252 | OSVERSIONINFOEX osvi; |
@@ -1245,13 +1262,16 @@ | ||
1245 | 1262 | return (ret); |
1246 | 1263 | } |
1247 | 1264 | |
1265 | +// OSが Windows95 かどうかを判別する。 | |
1266 | +BOOL IsWindows95() | |
1267 | +{ | |
1268 | + return IsWindowsVer(VER_PLATFORM_WIN32_WINDOWS, 4, 0); | |
1269 | +} | |
1270 | + | |
1248 | 1271 | // OSが WindowsNT4.0 かどうかを判別する。 |
1249 | -// | |
1250 | -// return TRUE: NT4.0 | |
1251 | -// FALSE: Not NT4.0 | |
1252 | 1272 | BOOL IsWindowsNT4() |
1253 | 1273 | { |
1254 | - return is_NT4(); | |
1274 | + return IsWindowsVer(VER_PLATFORM_WIN32_NT, 4, 0); | |
1255 | 1275 | } |
1256 | 1276 | |
1257 | 1277 | BOOL is_NT4() |
@@ -1259,40 +1279,9 @@ | ||
1259 | 1279 | // VS2013以上だと GetVersionEx() が警告となるため、VerifyVersionInfo() を使う。 |
1260 | 1280 | // しかし、VS2013でビルドしたプログラムは、そもそも NT4.0 では動作しないため、 |
1261 | 1281 | // 無条件に FALSE を返してもよいかもしれない。 |
1262 | - OSVERSIONINFOEX osvi; | |
1263 | - DWORDLONG dwlConditionMask = 0; | |
1264 | - int op = VER_EQUAL; | |
1265 | - BOOL ret; | |
1266 | - | |
1267 | - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); | |
1268 | - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); | |
1269 | - osvi.dwPlatformId = VER_PLATFORM_WIN32_NT; | |
1270 | - osvi.dwMajorVersion = 4; | |
1271 | - dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_PLATFORMID, op); | |
1272 | - dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op); | |
1273 | - ret = myVerifyVersionInfo(&osvi, VER_PLATFORMID | VER_MAJORVERSION, dwlConditionMask); | |
1274 | - return (ret); | |
1282 | + return IsWindowsVer(VER_PLATFORM_WIN32_NT, 4, 0); | |
1275 | 1283 | } |
1276 | 1284 | |
1277 | -// OSが 指定されたバージョン以降 かどうかを判別する。 | |
1278 | - | |
1279 | -BOOL IsWindowsVerOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion) | |
1280 | -{ | |
1281 | - OSVERSIONINFOEX osvi; | |
1282 | - DWORDLONG dwlConditionMask = 0; | |
1283 | - int op = VER_GREATER_EQUAL; | |
1284 | - BOOL ret; | |
1285 | - | |
1286 | - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); | |
1287 | - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); | |
1288 | - osvi.dwMajorVersion = dwMajorVersion; | |
1289 | - osvi.dwMinorVersion = dwMinorVersion; | |
1290 | - dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op); | |
1291 | - dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op); | |
1292 | - ret = myVerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); | |
1293 | - return (ret); | |
1294 | -} | |
1295 | - | |
1296 | 1285 | // OSが Windows2000 以降 かどうかを判別する。 |
1297 | 1286 | // |
1298 | 1287 | // return TRUE: 2000 or later |