【C/C++】OSのバージョン取得
VS2015でとあるアプリを作成してた時、
最初のチェックでOSがXP以外をはじく処理が必要でした。
気にせずいつも通りGetVersionExを使用したら、警告が。。。
1>hoge.cpp(57): warning C4996: 'GetVersionExW': が古い形式として宣言されました。
1> c:\program files (x86)\windows kits\8.1\include\um\sysinfoapi.h(442): note: 'GetVersionExW' の宣言を確認してください
だそうです。
解決法として、「"VersionHelpers.h" に定義されたAPIを使ってくれ」とのこと。
但し、Visual Studio 2013若しくはWindows SDK 8.1にしか上記のヘッダファイルが入っていないと。
なんと不親切な(´・ω・`)
最悪
#pragma warning(disable: 4996)
を追加すればwarningは出ないけど、かっちょ悪い。
ちなみにVS2013だとこれしないとビルドも通らないらしいです。
とりあえず書き換え
↓ ↓ ↓
なんとなくすっきりしたけど、「OSが7かXP以外は対応しない」とかの条件だとめんどそうだなぁ。
一応"VersionHelpers.h"のAPIメモ
API名 | TRUE判定 |
IsWindowsXPOrGreater() | XP以上 |
IsWindowsXPSP1OrGreater() | XP SP1以上(SP2,SP3も同様にある) |
IsWindowsVistaOrGreater() | Vista以上 |
IsWindowsVistaSP1OrGreater() | Vista SP1以上(SP2も同様にある) |
IsWindows7OrGreater() | 7以上 |
IsWindows7SP1OrGreater() | 7 SP1以上 |
IsWindows8OrGreater() | 8以上 |
IsWindows8Point1OrGreater() | 8.1以上 |
IsWindowsServer() | windows serverである |
あと、よく忘れるからOSのバージョンメモ。
PlatformIDが1のものは使わないから必要になったら調べる。
OS | Majorver | Minorver |
Windows NT 3.x | 3 | - |
Windows NT 4.0 | 4 | 0 |
Windows 2000 | 5 | 0 |
Windows XP | 5 | 1 |
WinServer 2003 / WinServer 2003 R2 | 5 | 2 |
Windows Vista / Windows Server 2008 | 6 | 0 |
Windows 7 / Windows Server 2008 R2 | 6 | 1 |
Windows 8 | 6 | 2 |
Windows 8.1 | 6 | 3 |
Windows 10 | 10 | 0 |