编程开发 > C/C++ > 文章内容

如何获得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;
  }
windows程序之滚动的正弦曲线(二)

热点推荐

登录注册
触屏版电脑版网站地图