生活随笔
收集整理的這篇文章主要介紹了
Windows 系统版本判断
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面是判斷操作系統的代碼
?
Cpp代碼??
#include?<windows.h>?? #include?<tchar.h>?? #include?<stdio.h>?? #include?<strsafe.h>?? ?? #pragma?comment(lib,?"User32.lib")?? ?? #define?BUFSIZE?256?? ?? typedef?void?(WINAPI?*PGNSI)(LPSYSTEM_INFO);?? typedef?BOOL?(WINAPI?*PGPI)(DWORD,?DWORD,?DWORD,?DWORD,?PDWORD);?? ?? BOOL?GetOSDisplayString(?LPTSTR?pszOS)?? {?? ???OSVERSIONINFOEX?osvi;?? ???SYSTEM_INFO?si;?? ???PGNSI?pGNSI;?? ???PGPI?pGPI;?? ???BOOL?bOsVersionInfoEx;?? ???DWORD?dwType;?? ?? ???ZeroMemory(&si,?sizeof(SYSTEM_INFO));?? ???ZeroMemory(&osvi,?sizeof(OSVERSIONINFOEX));?? ?? ???osvi.dwOSVersionInfoSize?=?sizeof(OSVERSIONINFOEX);?? ???bOsVersionInfoEx?=?GetVersionEx((OSVERSIONINFO*)?&osvi);?? ?? ???if(bOsVersionInfoEx?!=?NULL?)?return?1;?? ?? ????? ?? ???pGNSI?=?(PGNSI)?GetProcAddress(?? ??????GetModuleHandle(TEXT("kernel32.dll")),??? ??????"GetNativeSystemInfo");?? ???if(NULL?!=?pGNSI)?? ??????pGNSI(&si);?? ???else?GetSystemInfo(&si);?? ?? ???if?(?VER_PLATFORM_WIN32_NT==osvi.dwPlatformId?&&??? ????????osvi.dwMajorVersion?>?4?)?? ???{?? ??????StringCchCopy(pszOS,?BUFSIZE,?TEXT("Microsoft?"));?? ?? ???????? ?? ??????if?(?osvi.dwMajorVersion?==?6?)?? ??????{?? ?????????if(?osvi.dwMinorVersion?==?0?)?? ?????????{?? ????????????if(?osvi.wProductType?==?VER_NT_WORKSTATION?)?? ????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?Vista?"));?? ????????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?Server?2008?"?));?? ?????????}?? ?? ?????????if?(?osvi.dwMinorVersion?==?1?)?? ?????????{?? ????????????if(?osvi.wProductType?==?VER_NT_WORKSTATION?)?? ????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?7?"));?? ????????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?Server?2008?R2?"?));?? ?????????}?? ??????????? ?????????pGPI?=?(PGPI)?GetProcAddress(?? ????????????GetModuleHandle(TEXT("kernel32.dll")),??? ????????????"GetProductInfo");?? ?? ?????????pGPI(?osvi.dwMajorVersion,?osvi.dwMinorVersion,?0,?0,?&dwType);?? ?? ?????????switch(?dwType?)?? ?????????{?? ????????????case?PRODUCT_ULTIMATE:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Ultimate?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_PROFESSIONAL:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Professional"?));?? ???????????????break;?? ????????????case?PRODUCT_HOME_PREMIUM:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Home?Premium?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_HOME_BASIC:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Home?Basic?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_ENTERPRISE:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Enterprise?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_BUSINESS:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Business?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_STARTER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Starter?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_CLUSTER_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Cluster?Server?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_DATACENTER_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Datacenter?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_DATACENTER_SERVER_CORE:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Datacenter?Edition?(core?installation)"?));?? ???????????????break;?? ????????????case?PRODUCT_ENTERPRISE_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Enterprise?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_ENTERPRISE_SERVER_CORE:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Enterprise?Edition?(core?installation)"?));?? ???????????????break;?? ????????????case?PRODUCT_ENTERPRISE_SERVER_IA64:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Enterprise?Edition?for?Itanium-based?Systems"?));?? ???????????????break;?? ????????????case?PRODUCT_SMALLBUSINESS_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Small?Business?Server"?));?? ???????????????break;?? ????????????case?PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Small?Business?Server?Premium?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_STANDARD_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Standard?Edition"?));?? ???????????????break;?? ????????????case?PRODUCT_STANDARD_SERVER_CORE:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Standard?Edition?(core?installation)"?));?? ???????????????break;?? ????????????case?PRODUCT_WEB_SERVER:?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Web?Server?Edition"?));?? ???????????????break;?? ?????????}?? ??????}?? ?? ??????if?(?osvi.dwMajorVersion?==?5?&&?osvi.dwMinorVersion?==?2?)?? ??????{?? ?????????if(?GetSystemMetrics(SM_SERVERR2)?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Windows?Server?2003?R2,?"));?? ?????????else?if?(?osvi.wSuiteMask?&?VER_SUITE_STORAGE_SERVER?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Windows?Storage?Server?2003"));?? ?????????else?if?(?osvi.wSuiteMask?&?VER_SUITE_WH_SERVER?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Windows?Home?Server"));?? ?????????else?if(?osvi.wProductType?==?VER_NT_WORKSTATION?&&?? ??????????????????si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)?? ?????????{?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Windows?XP?Professional?x64?Edition"));?? ?????????}?? ?????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?Server?2003,?"));?? ?? ??????????? ?????????if?(?osvi.wProductType?!=?VER_NT_WORKSTATION?)?? ?????????{?? ????????????if?(?si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64?)?? ????????????{?? ????????????????if(?osvi.wSuiteMask?&?VER_SUITE_DATACENTER?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Datacenter?Edition?for?Itanium-based?Systems"?));?? ????????????????else?if(?osvi.wSuiteMask?&?VER_SUITE_ENTERPRISE?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Enterprise?Edition?for?Itanium-based?Systems"?));?? ????????????}?? ?? ????????????else?if?(?si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64?)?? ????????????{?? ????????????????if(?osvi.wSuiteMask?&?VER_SUITE_DATACENTER?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Datacenter?x64?Edition"?));?? ????????????????else?if(?osvi.wSuiteMask?&?VER_SUITE_ENTERPRISE?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Enterprise?x64?Edition"?));?? ????????????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Standard?x64?Edition"?));?? ????????????}?? ?? ????????????else?? ????????????{?? ????????????????if?(?osvi.wSuiteMask?&?VER_SUITE_COMPUTE_SERVER?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Compute?Cluster?Edition"?));?? ????????????????else?if(?osvi.wSuiteMask?&?VER_SUITE_DATACENTER?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Datacenter?Edition"?));?? ????????????????else?if(?osvi.wSuiteMask?&?VER_SUITE_ENTERPRISE?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Enterprise?Edition"?));?? ????????????????else?if?(?osvi.wSuiteMask?&?VER_SUITE_BLADE?)?? ???????????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Web?Edition"?));?? ????????????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Standard?Edition"?));?? ????????????}?? ?????????}?? ??????}?? ?? ??????if?(?osvi.dwMajorVersion?==?5?&&?osvi.dwMinorVersion?==?1?)?? ??????{?? ?????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?XP?"));?? ?????????if(?osvi.wSuiteMask?&?VER_SUITE_PERSONAL?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Home?Edition"?));?? ?????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Professional"?));?? ??????}?? ?? ??????if?(?osvi.dwMajorVersion?==?5?&&?osvi.dwMinorVersion?==?0?)?? ??????{?? ?????????StringCchCat(pszOS,?BUFSIZE,?TEXT("Windows?2000?"));?? ?? ?????????if?(?osvi.wProductType?==?VER_NT_WORKSTATION?)?? ?????????{?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Professional"?));?? ?????????}?? ?????????else??? ?????????{?? ????????????if(?osvi.wSuiteMask?&?VER_SUITE_DATACENTER?)?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Datacenter?Server"?));?? ????????????else?if(?osvi.wSuiteMask?&?VER_SUITE_ENTERPRISE?)?? ???????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Advanced?Server"?));?? ????????????else?StringCchCat(pszOS,?BUFSIZE,?TEXT(?"Server"?));?? ?????????}?? ??????}?? ?? ????????? ?? ??????if(?_tcslen(osvi.szCSDVersion)?>?0?)?? ??????{?? ??????????StringCchCat(pszOS,?BUFSIZE,?TEXT("?")?);?? ??????????StringCchCat(pszOS,?BUFSIZE,?osvi.szCSDVersion);?? ??????}?? ?? ??????TCHAR?buf[80];?? ?? ??????StringCchPrintf(?buf,?80,?TEXT("?(build?%d)"),?osvi.dwBuildNumber);?? ??????StringCchCat(pszOS,?BUFSIZE,?buf);?? ?? ??????if?(?osvi.dwMajorVersion?>=?6?)?? ??????{?? ?????????if?(?si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(?",?64-bit"?));?? ?????????else?if?(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL?)?? ????????????StringCchCat(pszOS,?BUFSIZE,?TEXT(",?32-bit"));?? ??????}?? ???????? ??????return?TRUE;??? ???}?? ?? ???else?? ???{???? ??????printf(?"This?sample?does?not?support?this?version?of?Windows.\n");?? ??????return?FALSE;?? ???}?? }?? ?? int?__cdecl?_tmain()?? {?? ????TCHAR?szOS[BUFSIZE];?? ?? ????if(?GetOSDisplayString(?szOS?)?)?? ????????_tprintf(?TEXT("\n%s\n"),?szOS?);?? }??
?
參照:
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 |
?
好了,還有就是要提供出處了:
總結
以上是生活随笔為你收集整理的Windows 系统版本判断的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。