如何获得Windows操作系统的版本
2010-7-20编辑:feimeimei
流水-代码来自:MSDN
#include
#include
#defineBUFSIZE80
BOOLGetOSVer(char*szOSName);
intmain()
{
charszname[MAX_PATH];
memset(szname,0,MAX_PATH);
BOOLbRet=GetOSVer(szname);
printf("YourOsversionis%sn",szname);
return0;
}
BOOLGetOSVer(char*szname)
{
OSVERSIONINFOEXosvi;
BOOLbOsVersionInfoEx;
//TrycallingGetVersionExusingtheOSVERSIONINFOEXstructure.
//Ifthatfails,tryusingtheOSVERSIONINFOstructure.
ZeroMemory(&osvi,sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx=GetVersionEx((OSVERSIONINFO*)&osvi)))
{
osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
if(!GetVersionEx((OSVERSIONINFO*)&osvi))
returnFALSE;
}
switch(osvi.dwPlatformId)
{
//TestfortheWindowsNTproductfamily.
caseVER_PLATFORM_WIN32_NT:
//Testforthespecificproductfamily.
if(osvi.dwMajorVersion==5&&osvi.dwMinorVersion==2)
strcpy(szname,"MicrosoftWindowsServer2003family,");
if(osvi.dwMajorVersion==5&&osvi.dwMinorVersion==1)
strcpy(szname,"MicrosoftWindowsXP");
if(osvi.dwMajorVersion==5&&osvi.dwMinorVersion==0)
strcpy(szname,"MicrosoftWindows2000");
if(osvi.dwMajorVersion<=4)
strcpy(szname,"MicrosoftWindowsNT");
//TestforspecificproductonWindowsNT4.0SP6andlater.
if(bOsVersionInfoEx)
{
//Testfortheworkstationtype.
if(osvi.wProductType==VER_NT_WORKSTATION)
{
if(osvi.dwMajorVersion==4)
strcat(szname,"Workstation4.0");
elseif(osvi.wSuiteMask&VER_SUITE_PERSONAL)
strcat(szname,"HomeEdition");
else
strcat(szname,"Professional");
}
//Testfortheservertype.
elseif(osvi.wProductType==VER_NT_SERVER)
{
if(osvi.dwMajorVersion==5&&osvi.dwMinorVersion==2)
{
if(osvi.wSuiteMask&VER_SUITE_DATACENTER)
strcat(szname,"DatacenterEdition");
elseif(osvi.wSuiteMask&VER_SUITE_ENTERPRISE)
strcat(szname,"EnterpriseEdition");
elseif(osvi.wSuiteMask==VER_SUITE_BLADE)
strcat(szname,"WebEdition");
else
strcat(szname,"StandardEdition");
}
elseif(osvi.dwMajorVersion==5&&osvi.dwMinorVersion==0)
{
if(osvi.wSuiteMask&VER_SUITE_DATACENTER)
strcat(szname,"DatacenterServer");
elseif(osvi.wSuiteMask&VER_SUITE_ENTERPRISE)
strcat(szname,"AdvancedServer");
else
strcat(szname,"Server");
}
else//WindowsNT4.0
{
if(osvi.wSuiteMask&VER_SUITE_ENTERPRISE)
strcat(szname,"Server4.0,EnterpriseEdition");
else
strcat(szname,"Server4.0");
}
}
}
else//TestforspecificproductonWindowsNT4.0SP5andearlier
{
HKEYhKey;
charszProductType[BUFSIZE];
DWORDdwBufLen=BUFSIZE;
LONGlRet;
lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM“CurrentControlSet“Control“ProductOptions",
0,KEY_QUERY_VALUE,&hKey);
if(lRet!=ERROR_SUCCESS)
returnFALSE;
lRet=RegQueryValueEx(hKey,"ProductType",NULL,NULL,
(LPBYTE)szProductType,&dwBufLen);
if((lRet!=ERROR_SUCCESS)(dwBufLen>BUFSIZE))
returnFALSE;
RegCloseKey(hKey);
if(lstrcmpi("WINNT",szProductType)==0)
strcat(szname,"Workstation");
if(lstrcmpi("LANMANNT",szProductType)==0)
strcat(szname,"Server");
if(lstrcmpi("SERVERNT",szProductType)==0)
strcat(szname,"AdvancedServer");
printf("%d.%d",osvi.dwMajorVersion,osvi.dwMinorVersion);
}
//Displayservicepack(ifany)andbuildnumber.
if(osvi.dwMajorVersion==4&&
lstrcmpi(osvi.szCSDVersion,"ServicePack6")==0)
{
HKEYhKey;
LONGlRet;
//TestforSP6versusSP6a.
lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE“Microsoft“WindowsNT“CurrentVersion“Hotfix“Q246009",
0,KEY_QUERY_VALUE,&hKey);
if(lRet==ERROR_SUCCESS)
printf("ServicePack6a(Build%d)n",osvi.dwBuildNumber&0xFFFF);
else//WindowsNT4.0priortoSP6a
{
printf("%s(Build%d)n",
osvi.szCSDVersion,
osvi.dwBuildNumber&0xFFFF);
}
RegCloseKey(hKey);
}
else//WindowsNT3.51andearlierorWindows2000andlater
{
printf("%s(Build%d)n",
osvi.szCSDVersion,
osvi.dwBuildNumber&0xFFFF);
}
break;
//TestfortheWindows95productfamily.
caseVER_PLATFORM_WIN32_WINDOWS:
if(osvi.dwMajorVersion==4&&osvi.dwMinorVersion==0)
{
strcpy(szname,"MicrosoftWindows95");
if(osvi.szCSDVersion==‘C‘osvi.szCSDVersion==‘B‘)
strcat(szname,"OSR2");
}
if(osvi.dwMajorVersion==4&&osvi.dwMinorVersion==10)
{
strcpy(szname,"MicrosoftWindows98");
if(osvi.szCSDVersion==‘A‘)
strcat(szname,"SE");
}
if(osvi.dwMajorVersion==4&&osvi.dwMinorVersion==90)
{
strcpy(szname,"MicrosoftWindowsMillenniumEditionn");
}
break;
caseVER_PLATFORM_WIN32s:
printf("MicrosoftWin32sn");
break;
}
//getchar();
returnTRUE;
}