Cpp获取Windows系统版本

来源:互联网 发布:尼康优化校准设置技巧 编辑:程序博客网 时间:2024/06/07 03:48

参考 windows 下c++获取操作系统版本名称笔记
感谢原博主的分享

windows通过c++获取操作系统主要分两种:
1、windows是8.1版本以下版本:获取操作系统可以通过windows提供的api中GetVersionEx函数来获取
2、windows是8.1版本及以上:获取操作系统主要通过RtlGetNtVersionNumbers法来获取

//获取8.1以下版本操作系统名称string GetSystemVersion(){    string strOSVersion = ("Unknown Microsoft Windows Version");    OSVERSIONINFOEX os;    os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);    if (!GetVersionEx((OSVERSIONINFO *)&os)) return(strOSVersion);    switch (os.dwMajorVersion)    {    case 4:        switch (os.dwMinorVersion)        {        case 0:            if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)                strOSVersion = ("Microsoft Windows NT 4.0");            else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)                strOSVersion = ("Microsoft Windows 95");            break;        case 10:            strOSVersion = ("Microsoft Windows 98");            break;        case 90:            strOSVersion = ("Microsoft Windows Me");            break;        }        break;    case 5:        switch (os.dwMinorVersion)        {        case 0:            strOSVersion = ("Microsoft Windows 2000");            break;        case 1:            strOSVersion = ("Microsoft Windows XP");            break;        case 2:        {            SYSTEM_INFO info;            GetSystemInfo(&info);            if (os.wProductType == VER_NT_WORKSTATION                && info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)            {                strOSVersion = ("Microsoft Windows XP Professional x64 Edition");            }            else if (GetSystemMetrics(SM_SERVERR2) == 0)                strOSVersion = ("Microsoft Windows Server 2003");            else if (GetSystemMetrics(SM_SERVERR2) != 0)                strOSVersion = ("Microsoft Windows Server 2003 R2");        }            break;        }        break;    case 6:        switch (os.dwMinorVersion)        {        case 0:            if (os.wProductType == VER_NT_WORKSTATION)                strOSVersion = ("Microsoft Windows Vista");            else                strOSVersion = ("Microsoft Windows Server 2008");            break;        case 1:            if (os.wProductType == VER_NT_WORKSTATION)                strOSVersion = ("Microsoft Windows 7");            else                strOSVersion = ("Microsoft Windows Server 2008 R2");            break;        case 2:            if (os.wProductType == VER_NT_WORKSTATION)                strOSVersion = ("Microsoft Windows 8");            else                strOSVersion = ("Microsoft Windows Server 2012");            break;        }        break;    }    return(strOSVersion);}//获取8.1以上版本操作系统名称string GetSystemVersionNew(){    string strOSVersion = "";    typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);    HINSTANCE hinst = LoadLibraryA("ntdll.dll");    DWORD dwMajor, dwMinor, dwBuildNumber;    NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");    proc(&dwMajor, &dwMinor, &dwBuildNumber);    if (dwMajor == 6 && dwMinor == 3)//win 8.1    {        if (dwBuildNumber == 4026541440)//WinServer2012R2的BuildNumber号        {            strOSVersion = "Microsoft Windows Server 2012 R2";        }        else        {            strOSVersion = "Microsoft Windows 8.1";        }    }    else if (dwMajor == 10 && dwMinor == 0)//win 10    {        if (dwBuildNumber == 4026546233)//Win10的BuildNumber号        {            strOSVersion = "Microsoft Windows 10";        }        else        {            strOSVersion = "Microsoft Windows Server 2016";        }    }    return(strOSVersion);}

需要完整代码请访问CPlusPlusExamples

原创粉丝点击