MoreNotepad++

--------活出自己的精彩。

导航

如何获取Windows OS类型(摘自Notepad++)

#include <windows.h>
#include <iostream>

using namespace std;

enum winVer {
    WV_UNKNOWN,
    WV_WIN32S,
    WV_95,
    WV_98,
    WV_ME,
    WV_NT,
    WV_W2K,
    WV_XP,
    WV_S2003,
    WV_XPX64,
    WV_VISTA,
    WV_WIN7,
    WV_WIN8
};

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);

winVer getWindowsVersion()
{
    OSVERSIONINFOEX osvi;
    SYSTEM_INFO si;
    PGNSI pGNSI;

    ZeroMemory(&si, sizeof(SYSTEM_INFO));
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    BOOL bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *)&osvi);

    if (!bOsVersionInfoEx) {
        osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
        if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) {
            return WV_UNKNOWN;
        }
    }

    pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");

    if(pGNSI != NULL) {
        pGNSI(&si);
    }
    else {
        GetSystemInfo(&si);
    }

    switch (osvi.dwPlatformId)
    {
    case VER_PLATFORM_WIN32_NT:
    {
        if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2 )
        {
            return WV_WIN8;
        }

        if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 )
        {
            return WV_WIN7;
        }

        if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
        {
            return WV_VISTA;
        }

        if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
        {
            if (osvi.wProductType == VER_NT_WORKSTATION &&
                    si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
            {
                return WV_XPX64;
            }
            return WV_S2003;
        }

        if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
            return WV_XP;

        if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
            return WV_W2K;

        if ( osvi.dwMajorVersion <= 4 )
            return WV_NT;
    }
    break;

    // Test for the Windows Me/98/95.
    case VER_PLATFORM_WIN32_WINDOWS:
    {
        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
        {
            return WV_95;
        }

        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
        {
            return WV_98;
        }

        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
        {
            return WV_ME;
        }
    }
    break;

    case VER_PLATFORM_WIN32s:
        return WV_WIN32S;

    default :
        return WV_UNKNOWN;
    }

    return WV_UNKNOWN;
}

int main()
{
    winVer ver = getWindowsVersion();
    
    switch(ver)
    {
        case WV_WIN7:
            cout << "win7" << endl;
            break;
        case WV_XP:    
            cout << "WinXp" << endl;    
            break;
        default:
            cout << "else" << endl;
            break;
    }

    return 0;
}

 

posted on 2013-06-21 17:09  MoreNotepad++  阅读(319)  评论(0)    收藏  举报