Windows 系统版本判断

博客分类:

 

很多情况下,需要软件判断操作系统,其实网上写的都很少,我希望这篇文章能给大家帮助

首先我们要在.h中定义下面的东西

  1. #define PRODUCT_UNDEFINED                       0x00000000
  2. #define PRODUCT_ULTIMATE                        0x00000001
  3. #define PRODUCT_HOME_BASIC                      0x00000002
  4. #define PRODUCT_HOME_PREMIUM                    0x00000003
  5. #define PRODUCT_ENTERPRISE                      0x00000004
  6. #define PRODUCT_HOME_BASIC_N                    0x00000005
  7. #define PRODUCT_BUSINESS                        0x00000006
  8. #define PRODUCT_STANDARD_SERVER                 0x00000007
  9. #define PRODUCT_DATACENTER_SERVER               0x00000008
  10. #define PRODUCT_SMALLBUSINESS_SERVER            0x00000009
  11. #define PRODUCT_ENTERPRISE_SERVER               0x0000000A
  12. #define PRODUCT_STARTER                         0x0000000B
  13. #define PRODUCT_DATACENTER_SERVER_CORE          0x0000000C
  14. #define PRODUCT_STANDARD_SERVER_CORE            0x0000000D
  15. #define PRODUCT_ENTERPRISE_SERVER_CORE          0x0000000E
  16. #define PRODUCT_ENTERPRISE_SERVER_IA64          0x0000000F
  17. #define PRODUCT_BUSINESS_N                      0x00000010
  18. #define PRODUCT_WEB_SERVER                      0x00000011
  19. #define PRODUCT_CLUSTER_SERVER                  0x00000012
  20. #define PRODUCT_HOME_SERVER                     0x00000013
  21. #define PRODUCT_STORAGE_EXPRESS_SERVER          0x00000014
  22. #define PRODUCT_STORAGE_STANDARD_SERVER         0x00000015
  23. #define PRODUCT_STORAGE_WORKGROUP_SERVER        0x00000016
  24. #define PRODUCT_STORAGE_ENTERPRISE_SERVER       0x00000017
  25. #define PRODUCT_SERVER_FOR_SMALLBUSINESS        0x00000018
  26. #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM    0x00000019
  27. #define PRODUCT_UNLICENSED                      0xABCDABCD

好了,这是必须的定义,为了就是判断操作系统

下面是判断操作系统的代码

  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <stdio.h>
  4. #include <strsafe.h>
  5. #pragma comment(lib, "User32.lib")
  6. #define BUFSIZE 256
  7. typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
  8. typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
  9. BOOL GetOSDisplayString( LPTSTR pszOS)
  10. {
  11. OSVERSIONINFOEX osvi;
  12. SYSTEM_INFO si;
  13. PGNSI pGNSI;
  14. PGPI pGPI;
  15. BOOL bOsVersionInfoEx;
  16. DWORD dwType;
  17. ZeroMemory(&si, sizeof(SYSTEM_INFO));
  18. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  19. osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  20. bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);
  21. if(bOsVersionInfoEx != NULL ) return 1;
  22. // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
  23. pGNSI = (PGNSI) GetProcAddress(
  24. GetModuleHandle(TEXT("kernel32.dll")),
  25. "GetNativeSystemInfo");
  26. if(NULL != pGNSI)
  27. pGNSI(&si);
  28. else GetSystemInfo(&si);
  29. if ( VER_PLATFORM_WIN32_NT==osvi.dwPlatformId &&
  30. osvi.dwMajorVersion > 4 )
  31. {
  32. StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft "));
  33. // Test for the specific product.
  34. if ( osvi.dwMajorVersion == 6 )
  35. {
  36. if( osvi.dwMinorVersion == 0 )
  37. {
  38. if( osvi.wProductType == VER_NT_WORKSTATION )
  39. StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
  40. else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 " ));
  41. }
  42. if ( osvi.dwMinorVersion == 1 )
  43. {
  44. if( osvi.wProductType == VER_NT_WORKSTATION )
  45. StringCchCat(pszOS, BUFSIZE, TEXT("Windows 7 "));
  46. else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 R2 " ));
  47. }
  48. pGPI = (PGPI) GetProcAddress(
  49. GetModuleHandle(TEXT("kernel32.dll")),
  50. "GetProductInfo");
  51. pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
  52. switch( dwType )
  53. {
  54. case PRODUCT_ULTIMATE:
  55. StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition" ));
  56. break;
  57. case PRODUCT_PROFESSIONAL:
  58. StringCchCat(pszOS, BUFSIZE, TEXT("Professional" ));
  59. break;
  60. case PRODUCT_HOME_PREMIUM:
  61. StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition" ));
  62. break;
  63. case PRODUCT_HOME_BASIC:
  64. StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition" ));
  65. break;
  66. case PRODUCT_ENTERPRISE:
  67. StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
  68. break;
  69. case PRODUCT_BUSINESS:
  70. StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition" ));
  71. break;
  72. case PRODUCT_STARTER:
  73. StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition" ));
  74. break;
  75. case PRODUCT_CLUSTER_SERVER:
  76. StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition" ));
  77. break;
  78. case PRODUCT_DATACENTER_SERVER:
  79. StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition" ));
  80. break;
  81. case PRODUCT_DATACENTER_SERVER_CORE:
  82. StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)" ));
  83. break;
  84. case PRODUCT_ENTERPRISE_SERVER:
  85. StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
  86. break;
  87. case PRODUCT_ENTERPRISE_SERVER_CORE:
  88. StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)" ));
  89. break;
  90. case PRODUCT_ENTERPRISE_SERVER_IA64:
  91. StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems" ));
  92. break;
  93. case PRODUCT_SMALLBUSINESS_SERVER:
  94. StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server" ));
  95. break;
  96. case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
  97. StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition" ));
  98. break;
  99. case PRODUCT_STANDARD_SERVER:
  100. StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition" ));
  101. break;
  102. case PRODUCT_STANDARD_SERVER_CORE:
  103. StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)" ));
  104. break;
  105. case PRODUCT_WEB_SERVER:
  106. StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition" ));
  107. break;
  108. }
  109. }
  110. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
  111. {
  112. if( GetSystemMetrics(SM_SERVERR2) )
  113. StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Server 2003 R2, "));
  114. else if ( osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
  115. StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Storage Server 2003"));
  116. else if ( osvi.wSuiteMask & VER_SUITE_WH_SERVER )
  117. StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Home Server"));
  118. else if( osvi.wProductType == VER_NT_WORKSTATION &&
  119. si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
  120. {
  121. StringCchCat(pszOS, BUFSIZE, TEXT( "Windows XP Professional x64 Edition"));
  122. }
  123. else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, "));
  124. // Test for the server type.
  125. if ( osvi.wProductType != VER_NT_WORKSTATION )
  126. {
  127. if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
  128. {
  129. if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  130. StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition for Itanium-based Systems" ));
  131. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  132. StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition for Itanium-based Systems" ));
  133. }
  134. else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
  135. {
  136. if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  137. StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter x64 Edition" ));
  138. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  139. StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise x64 Edition" ));
  140. else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard x64 Edition" ));
  141. }
  142. else
  143. {
  144. if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
  145. StringCchCat(pszOS, BUFSIZE, TEXT( "Compute Cluster Edition" ));
  146. else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  147. StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition" ));
  148. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  149. StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition" ));
  150. else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
  151. StringCchCat(pszOS, BUFSIZE, TEXT( "Web Edition" ));
  152. else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard Edition" ));
  153. }
  154. }
  155. }
  156. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
  157. {
  158. StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP "));
  159. if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
  160. StringCchCat(pszOS, BUFSIZE, TEXT( "Home Edition" ));
  161. else StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
  162. }
  163. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
  164. {
  165. StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 "));
  166. if ( osvi.wProductType == VER_NT_WORKSTATION )
  167. {
  168. StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
  169. }
  170. else
  171. {
  172. if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  173. StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Server" ));
  174. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  175. StringCchCat(pszOS, BUFSIZE, TEXT( "Advanced Server" ));
  176. else StringCchCat(pszOS, BUFSIZE, TEXT( "Server" ));
  177. }
  178. }
  179. // Include service pack (if any) and build number.
  180. if( _tcslen(osvi.szCSDVersion) > 0 )
  181. {
  182. StringCchCat(pszOS, BUFSIZE, TEXT(" ") );
  183. StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
  184. }
  185. TCHAR buf[80];
  186. StringCchPrintf( buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
  187. StringCchCat(pszOS, BUFSIZE, buf);
  188. if ( osvi.dwMajorVersion >= 6 )
  189. {
  190. if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
  191. StringCchCat(pszOS, BUFSIZE, TEXT( ", 64-bit" ));
  192. else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
  193. StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
  194. }
  195. return TRUE;
  196. }
  197. else
  198. {
  199. printf( "This sample does not support this version of Windows.\n");
  200. return FALSE;
  201. }
  202. }
  203. int __cdecl _tmain()
  204. {
  205. TCHAR szOS[BUFSIZE];
  206. if( GetOSDisplayString( szOS ) )
  207. _tprintf( TEXT("\n%s\n"), szOS );
  208. }

参照:

Operating system Version number dwMajorVersiondwMinorVersion Other

Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Server 2008 6.0 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Vista 6.0 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0
Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER
Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0
Windows XP Professional x64 Edition 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
Windows XP 5.1 5 1 Not applicable
Windows 2000 5.0 5 0 Not applicable

好了,还有就是要提供出处了:

http://msdn.microsoft.com/en-us/library/ms724429(v=vs.85).aspx

http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724833(v=vs.85).aspx

http://www.usefullcode.net/2006/12/windows_vista_2.html

Windows 系统版本判断的更多相关文章

  1. Windows系统版本判定那些事儿

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  2. Windows系统版本判定那些事儿[转]

    Windows系统版本判定那些事儿 转自CSDN,原文链接,我比较不要脸, 全部给复制过来了 前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度 ...

  3. inno setup判断是Windows系统版本(其实还是Delphi代码,还能检查域控制器和家庭版)

    1.设置Windows最低版本要求 [Setup]: MinVersion 格式: a.bb,c.dd,这里 a.bb 是 Windows 版本,c.dd 是 Windows NT 版本. 默认值: ...

  4. Windows系统版本判定那些事儿(有图,各种情况,很清楚)

    前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Windows获取系统版本的方法和遇到的一些问题.在Win8和Win10出来之后,在获取 ...

  5. Delphi 10.3版本获取windows系统版本和CPU信息

    procedure TForm1.Button1Click(Sender: TObject); var mm:TRegistry; cpu:string; begin mm:=TRegistry.Cr ...

  6. Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别

    我们常常听说操作系统的MSDN版.OEM版.RTM版.VOL版等等,它们到底是什么意思,有什么不同呢? (一)MSDN (Microsoft Developer Network)版MSDN软件是微软公 ...

  7. cmd提取时间格式(小时)问题以及Windows系统语言判断

    你在这里看到了我的现在的时间是01:15,没错正在做个开发,本来好好的,结果一运行,直接报错: 这里就是时间中的获取小时出了问题,之前23点那会已经调试通过了,过那时是没有问题的,那么这时发生了什么? ...

  8. 也谈如何获取真实正确的 Windows 系统版本号

    关于 GetVersion 系列接口 关于如何获取 Windows 系统版本号的话题,网上已经有了太多的帖子.但个人觉得总结的都不尽全面,或者没有给出比较稳定的解决方案. 众所周知,获取 Window ...

  9. 使用bat脚本永久激活Windows系统

    每次重装完系统后,右下角会提示系统未激活,无法进行一些个性化设置. 在这里我自己写了一个bat脚本用于激活Windows系统.(仅供学习) 文件下载: 链接:https://pan.baidu.com ...

随机推荐

  1. windows 编程 —— 消息与参数(滚动条、键盘、鼠标)

    目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...

  2. 图像的影像地图超链接,<map>标签浅谈

    在HTML中还可以把图片划分成多个热点区域,每一个热点域链接到不同网页的资源.这种效果的实质是把一幅图片划分为不同的热点区域,再让不同的区域进行超链接.这就是影像地图.要完成地图区域超链接要用到三种标 ...

  3. 泛泰A870刷4.4专用英文版非触摸CWM Recovery 6.0.4.8(三版通刷)

    首先声明. 发此Recovery的目的是測试能否够三版都能够启动. 而且不会出现像850 860之前出现过的卡第一屏问题! 不希望看到某些人士的过度解读!! 此Recovery能够刷第三方4.4 RO ...

  4. TinyXml快速入门(二)

    在<TinyXml快速入门(一)>中我介绍了使用TinyXml库如何创建和打印xml文件,下面我介绍使用tinyxml库对xml文件进行一系列的操作,包括获取xml文件声明,查询指定节点. ...

  5. VSS Get Latest Version 没有提示recursive的对话框解决

    今天按照VSS使用时,当“Get Latest version”时,不小心勾选了 “Only show this dialog when the Shift key is down”,因此当我再“Ge ...

  6. Hadoop32位和64位的查询

    1.查看自己的hadoop版本是32位还是64位 进入: hadoop-2.6.4/lib/native 使用file命令 file libhadoop.so.1.0.0

  7. 使用truncate命令清空当前用户所有表的所有数据

    --批量清空当前用户所有表的所有数据 declarev_sql varchar2(2000) ;CURSOR cur is select table_name from user_tables ord ...

  8. Virtualbox安装增强工具失败

    在安装Virtualbox增强工具安装时出现unable to find the sources of your current Linux kernel,安装失败,导致主机与虚拟机之间不能共享文件夹 ...

  9. Debian 桌面美化

    Debian 桌面美化 安装 gnome-tweak-tool aptitude install gnome-tweak-tool 登陆gnome-look下载主题包 gnome-look上有很多主题 ...

  10. MVC接收以post形式传输的各种参数

    近日研究用wcf框架接收同事Android端以post形式传输的各种类型的参数,来做处理.但研究过程中问题比较多,首先键值对的形式是实现了,传输int,string类型都不成问题,但是到传输文件的时候 ...