日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

GetVersionEx 获取系统版本信息

發布時間:2023/12/20 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GetVersionEx 获取系统版本信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.csdn.net/yyingwei/article/details/8286658


最近在windows 8上獲取系統版本信息需要調用系統API,于是用到了GetVersionEx。

首先看一看函數原型:

[cpp]?view plaincopy
  • BOOL?GetVersionEx(POSVERSIONINFO?pVersionInformation);??

  • 結構OSVERSIONINFOEX定義如下:

    [cpp]?view plaincopy
  • typedef?struct?{??
  • ????DWORD?dwOSVersionInfoSize;???????//在使用GetVersionEx之前要將此初始化為結構的大小??
  • ????DWORD?dwMajorVersion;???????????????//系統主版本號??
  • ????DWORD?dwMinorVersion;???????????????//系統次版本號??
  • ????DWORD?dwBuildNumber;???????????????//系統構建號??
  • ????DWORD?dwPlatformId;??????????????????//系統支持的平臺??
  • ????TCHAR?szCSDVersion[128];??????????//系統補丁包的名稱??
  • ????WORD?wServicePackMajor;????????????//系統補丁包的主版本??
  • ????WORD?wServicePackMinor;????????????//系統補丁包的次版本??
  • ????WORD?wSuiteMask;??????????????????????//標識系統上的程序組??
  • ????BYTE?wProductType;????????????????????//標識系統類型??
  • ????BYTE?wReserved;?????????????????????????//保留,未使用??
  • }?OSVERSIONINFOEX,?*POSVERSIONINFOEX;??

  • 接著在調用函數之前先初始化結構的大小并調用函數,返回true表示成功:

    [cpp]?view plaincopy
  • OSVERSIONINFOEX?os;??
  • os.dwOSVersionInfoSize=sizeof(os);??
  • if(!GetVersionEx((OSVERSIONINFO?*)&os))??
  • {??
  • ??????return?FALSE;??
  • }??

  • 函數調用成功以后就可以通過OSVERSIONINFOEX來查看系統的版本信息了。
    根據微軟操作系統編號發現windows 8 對應的windows version number是6.2
    如下:?
    Operating system Version number
    Windows 8 6.2
    Windows 7 6.1
    Windows Server 2008 R2 6.1
    Windows Server 2008 6.0
    Windows Vista 6.0
    Windows Server 2003 R2 5.2
    Windows Server 2003 5.2
    Windows XP 5.1
    Windows 2000 5.0

    下面是一個通過系統版本來判斷操作系統名稱的例子:

    [cpp]?view plaincopy
  • CString?getSystemName()??
  • {??
  • ????SYSTEM_INFO?info;????????????????//用SYSTEM_INFO結構判斷64位AMD處理器??
  • ????GetSystemInfo(&info);????????????//調用GetSystemInfo函數填充結構??
  • ????OSVERSIONINFOEX?os;??
  • ????os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);???
  • ????if(GetVersionEx((OSVERSIONINFO?*)&os))????????????????????
  • ????{??
  • ????????CString?vname;??
  • ??
  • ????????//下面根據版本信息判斷操作系統名稱??
  • ????????switch(os.dwMajorVersion){????????????????????????//判斷主版本號??
  • ????????????case?4:??
  • ????????????????switch(os.dwMinorVersion){????????????????//判斷次版本號??
  • ????????????????????case?0:??
  • ????????????????????????if(os.dwPlatformId==VER_PLATFORM_WIN32_NT)??
  • ????????????????????????????vname=_T("Microsoft?Windows?NT?4.0");??//1996年7月發布??
  • ????????????????????????else?if(os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)??
  • ????????????????????????????vname=_T("Microsoft?Windows?95");??
  • ????????????????????????break;??
  • ????????????????????case?10:??
  • ????????????????????????vname=_T("Microsoft?Windows?98");??
  • ????????????????????????break;??
  • ????????????????????case?90:??
  • ????????????????????????vname=_T("Microsoft?Windows?Me");??
  • ????????????????????????break;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????case?5:??
  • ????????????????switch(os.dwMinorVersion){???????????????//再比較dwMinorVersion的值??
  • ????????????????????case?0:??
  • ????????????????????????vname=_T("Microsoft?Windows?2000");????//1999年12月發布??
  • ????????????????????????break;??
  • ????????????????????case?1:??
  • ????????????????????????vname=_T("Microsoft?Windows?XP");??????//2001年8月發布??
  • ????????????????????????break;??
  • ????????????????????case?2:??
  • ????????????????????????if(os.wProductType==VER_NT_WORKSTATION?&&???
  • ???????????????????????????info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)??
  • ????????????????????????????vname=_T("Microsoft?Windows?XP?Professional?x64?Edition");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)==0)??
  • ????????????????????????????vname=_T("Microsoft?Windows?Server?2003");???//2003年3月發布??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)!=0)??
  • ????????????????????????????vname=_T("Microsoft?Windows?Server?2003?R2");??
  • ????????????????????????break;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????case?6:??
  • ????????????????switch(os.dwMinorVersion){??
  • ????????????????????case?0:??
  • ????????????????????????if(os.wProductType==VER_NT_WORKSTATION)??
  • ????????????????????????????vname=_T("Microsoft?Windows?Vista");??
  • ????????????????????????else??
  • ????????????????????????????vname=_T("Microsoft?Windows?Server?2008");???//服務器版本??
  • ????????????????????????break;??
  • ????????????????????case?1:??
  • ????????????????????????if(os.wProductType==VER_NT_WORKSTATION)??
  • ????????????????????????????vname=_T("Microsoft?Windows?7");??
  • ????????????????????????else??
  • ????????????????????????????vname=_T("Microsoft?Windows?Server?2008?R2");??
  • ????????????????????????break;??
  • ????????????case?2:??
  • ????????????????vname=_T("Microsoft?Windows?7");??
  • ????????????break;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????default:??
  • ????????????????vname=_T("未知操作系統");??
  • ????????}??
  • ????????return?vname;??
  • ????}??
  • ????else??
  • ????????return?_T("");??
  • }??

  • 以上只能判斷操作系統的名稱,那如何判斷它是什么版本的呢(如Home版或Professional版)。
    下面這個函數就返回具體的版本名稱:

    [cpp]?view plaincopy
  • CString?getVersionMark()??
  • {??
  • ????OSVERSIONINFOEX?os;??
  • ????os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);??
  • ????if(GetVersionEx((OSVERSIONINFO?*)&os)){??
  • ????????CString?vmark;??
  • ??
  • ????????switch(os.dwMajorVersion){????????????????//先判斷操作系統版本??
  • ????????????case?5:??
  • ????????????????switch(os.dwMinorVersion){??
  • ????????????????????case?0:??????????????????//Windows?2000??
  • ????????????????????????if(os.wSuiteMask==VER_SUITE_ENTERPRISE)??
  • ????????????????????????????vmark=_T("Advanced?Server");??
  • ????????????????????????break;??
  • ????????????????????case?1:??????????????????//Windows?XP??
  • ????????????????????????if(os.wSuiteMask==VER_SUITE_EMBEDDEDNT)??
  • ????????????????????????????vmark=_T("Embedded");??
  • ????????????????????????else?if(os.wSuiteMask==VER_SUITE_PERSONAL)??
  • ????????????????????????????vmark=_T("Home?Edition");??
  • ????????????????????????else??
  • ????????????????????????????vmark=_T("Professional");??
  • ????????????????????????break;??
  • ????????????????????case?2:??
  • ????????????????????????if(GetSystemMetrics(SM_SERVERR2)==0?&&?/??
  • ??
  • ????????????????????????os.wSuiteMask==VER_SUITE_BLADE)??//Windows?Server?2003??
  • ????????????????????????????vmark=_T("Web?Edition");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)==0?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_COMPUTE_SERVER)??
  • ????????????????????????????vmark=_T("Compute?Cluster?Edition");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)==0?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_STORAGE_SERVER)??
  • ????????????????????????????vmark=_T("Storage?Server");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)==0?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_DATACENTER)??
  • ????????????????????????????vmark=_T("Datacenter?Edition");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)==0?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_ENTERPRISE)??
  • ????????????????????????????vmark=_T("Enterprise?Edition");??
  • ????????????????????????else?if(GetSystemMetrics(SM_SERVERR2)!=0?&&???
  • ???????????????????????????os.wSuiteMask==VER_SUITE_STORAGE_SERVER)???
  • ????????????????????????????vmark=_T("Storage?Server");??
  • ????????????????????????break;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????case?6:??
  • ????????????????switch(os.dwMinorVersion){??
  • ????????????????????case?0:??
  • ????????????????????????if(os.wProductType!=VER_NT_WORKSTATION?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_DATACENTER)???
  • ????????????????????????????vmark=_T("Datacenter?Server");??
  • ????????????????????????else?if(os.wProductType!=VER_NT_WORKSTATION?&&???
  • ????????????????????????os.wSuiteMask==VER_SUITE_ENTERPRISE)??
  • ????????????????????????????vmark=_T("Enterprise");??
  • ????????????????????????else?if(os.wProductType==VER_NT_WORKSTATION?&&???
  • ???????????????????????????os.wSuiteMask==VER_SUITE_PERSONAL)??//Windows?Vista??
  • ????????????????????????????vmark=_T("Home");??
  • ????????????????????????break;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????default:??
  • ????????????????vmark=_T("");??
  • ????????}??
  • ????????return?vmark;??
  • ????}??
  • ????else??
  • ????????return?_T("");??
  • }??

  • 另外,操作系統的補丁包名稱也可以從szCSDVersion直接獲取。

    FYI

    總結

    以上是生活随笔為你收集整理的GetVersionEx 获取系统版本信息的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。