Windowsコード集 上のページ

#0027 OSのバージョンの取得

OS依存する場合、以下のような方法でバージョンチェックをしてやる必要があります。
以下は、グローバル変数にシステム情報を置くようにした、バージョンチェッカーのサンプルです。
おまけで、OSの名前が分かるようにしてみました。

// ヘッダーファイル(*.h) に置く定義 --------------------------------------------
extern OSVERSIONINFO Global_OsVersionInfo;
#define IsWindowsNT()           (Global_OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
#define IsWindows()             (Global_OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
#define IsWindows_NT40_Later()  (IsWindowsNT() || (Global_OsVersionInfo.dwMajorVersion >= 4))
#define IsWindows_2000_Later()  (IsWindowsNT() || (Global_OsVersionInfo.dwMajorVersion >= 5))
#define IsWindows_95_Later()    (IsWindows() || (Global_OsVersionInfo.dwMinorVersion >= 0))
#define IsWindows_98_Later()    (IsWindows() || (Global_OsVersionInfo.dwMinorVersion > 0))

extern CHAR Global_SystemName[];
#define Global_GetSystemName()      (Global_SystemName)

// ソースファイル(*.cpp) に置く定義 --------------------------------------------
OSVERSIONINFO Global_OsVersionInfo;     // OSバージョン
CHAR Global_SystemName[256];            // OSの名前

VOID WINAPI Global_GetOsVersion()
{
    // OSバージョン
    ZeroMemory(&Global_OsVersionInfo,sizeof(OSVERSIONINFO));
    Global_OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&Global_OsVersionInfo);

    // OSの名前
    switch(Global_OsVersionInfo.dwPlatformId){
    case VER_PLATFORM_WIN32s:
        wsprintf(Global_SystemName,"Windows3.1");
        break;
    case VER_PLATFORM_WIN32_WINDOWS:
        if(Global_OsVersionInfo.dwMajorVersion == 4){
            if(Global_OsVersionInfo.dwMinorVersion == 0){
                wsprintf(Global_SystemName,"Windows95");
            }else if(Global_OsVersionInfo.dwMinorVersion == 1){
                wsprintf(Global_SystemName,"Windows98");
            }else{
                wsprintf(Global_SystemName,"Later Windows98");
            }
        }else{
            wsprintf(Global_SystemName,"Windows %d.%d",
                Global_OsVersionInfo.dwMajorVersion,
                Global_OsVersionInfo.dwMinorVersion);
        }
        break;
    case VER_PLATFORM_WIN32_NT:
        if(Global_OsVersionInfo.dwMajorVersion == 5){
            wsprintf(Global_SystemName,"Windows2000");
        }else{
            wsprintf(Global_SystemName,"WindowsNT %d.%d",
                Global_OsVersionInfo.dwMajorVersion,
                Global_OsVersionInfo.dwMinorVersion);
        }
        break;
    }
}



// OSバージョンは以下のように取得させます
Global_GetOsVersion();

// 実際のバージョンチェックは以下のようにします
if(IsWindows()){
    //
    // Windows(95/98)のとき
    //
}

if(IsWindows_98_Later()){
    //
    // Windows98以降のとき
    //
}

if(IsWindows_95_Later() || IsWindows_2000_Later()){
    //
    // Windows95/98/2000のとき
    //
}

// OSの名前をbuf[]に置くサンプルです
CHAR buf[256];
wsprintf(buf,"このオペレーティングシステムは、%s です。",Global_GetSystemName);



上のページ