CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

怎样用程序判断系统是Win2000还是WinXP?

楼主uaiia(老菜鸟)2003-03-01 00:55:48 在 VC/MFC / 基础类 提问

怎样用程序判断系统是Win2000还是WinXP? 问题点数:50、回复次数:3Top

1 楼JennyVenus()回复于 2003-03-01 02:54:21 得分 30

void   CLakerDlg::DetectSystemVersion(void)  
  {  
  OSVERSIONINFOEX   osvi;  
  BOOL   bOsVersionInfoEx;  
  char   sql[   100   ];  
  memset(   sql,   0,   100   );  
  #define   a(   t   )   strcat(   sql,   t   )  
   
  ZeroMemory(   &osvi,   sizeof(   OSVERSIONINFOEX   )   );  
  osvi.dwOSVersionInfoSize   =   sizeof(   OSVERSIONINFOEX   );  
  a(   " -->"   );  
   
  if(   !(   bOsVersionInfoEx   =   GetVersionEx(   (   OSVERSIONINFO   *   )   &osvi   )   )   )  
  {  
  osvi.dwOSVersionInfoSize   =   sizeof   (   OSVERSIONINFO   );  
  if   (   !GetVersionEx   (   (   OSVERSIONINFO   *   )   &osvi)   )  
  {  
  //delete   []s;  
  return;  
  }  
  }  
  switch   (osvi.dwPlatformId)  
  {  
  case   VER_PLATFORM_WIN32_NT:  
  if(   osvi.dwMajorVersion   <=   4   )  
  a(   "Microsoft   Windows   NT   "   );  
  if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   0   )  
  a(   "Microsoft   Windows   2000   "   );  
  if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   1   )  
  a(   "Microsoft   Windows   XP   "   );  
  if(   bOsVersionInfoEx   )  
  {  
  if   (   osvi.wProductType   ==   VER_NT_WORKSTATION   )  
  {  
  if(   osvi.wSuiteMask   &   VER_SUITE_PERSONAL   )  
  a(   "Personal   "   );  
  else  
  a(   "Professional   "   );  
  }  
  else   if   (   osvi.wProductType   ==   VER_NT_SERVER   )  
  {  
  if(   osvi.wSuiteMask   &   VER_SUITE_DATACENTER   )  
  a   (   "DataCenter   Server   "   );  
  else   if(     osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE     )  
  a   (   "Advanced   Server   "   );  
  else  
  a   (   "Server   "   );  
  }  
  }  
  else  
  {  
  HKEY   hKey;  
  char   szProductType[80];  
  DWORD   dwBufLen;  
   
  RegOpenKeyEx(   HKEY_LOCAL_MACHINE,   "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",   0,   KEY_QUERY_VALUE,   &hKey   );  
  RegQueryValueEx(   hKey,   "ProductType",   NULL,   NULL,   (   LPBYTE   )szProductType,   &dwBufLen   );  
  RegCloseKey(   hKey   );  
  if(   lstrcmpi(   "WINNT",   szProductType   )   ==   0   )  
  a(   "Professional   "   );  
  if(   lstrcmpi(   "LANMANNT",   szProductType   )   ==   0   )  
  a(     "Server   "     );  
  if(   lstrcmpi(   "SERVERNT",   szProductType   )   ==   0   )  
  a(   "Advanced   Server   "   );  
  }  
   
  if   (     osvi.dwMajorVersion   <=   4     )  
  {  
  CString   s0;  
  s0.Format(   "version   %d.%d   %s   (   Build   %d   )",   osvi.dwMajorVersion,   osvi.dwMinorVersion,   osvi.szCSDVersion,   osvi.dwBuildNumber   &   0xFFFF   );  
  a(   (   LPCTSTR   )s0   );  
  }  
  else  
  {    
  CString   s1;  
  s1.Format(   "%s   (   Build   %d   )",   osvi.szCSDVersion,   osvi.dwBuildNumber   &   0xFFFF   );  
  a(   (   LPCTSTR   )s1   );  
  }  
  break;  
   
  case   VER_PLATFORM_WIN32_WINDOWS:  
   
  if   (   osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   0   )  
  {  
  a(   "Microsoft   Windows   95   "   );  
  if   (   osvi.szCSDVersion[   1   ]   ==   'C'   ||   osvi.szCSDVersion[   1   ]   ==   'B'     )  
  a(   "OSR2   "     );  
  }    
  if   (   osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   10   )  
  {  
  a(   "Microsoft   Windows   98   "   );  
  if   (   osvi.szCSDVersion[1]   ==   'A')  
  a(   "SE   "     );  
  }    
  if   (   osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   90   )  
  {  
  a(   "Microsoft   Windows   Me   "   );  
  }    
  break;  
   
  case   VER_PLATFORM_WIN32s:  
  a(   "Microsoft   Win32s"   );  
  break;  
  }  
  return;    
  }  
  Top

2 楼mostneed(黙黙)回复于 2003-03-01 04:08:24 得分 10

现成的类下载:  
   
  http://www.naughter.com/dtwinver.htmlTop

3 楼mostneed(黙黙)回复于 2003-03-01 04:10:50 得分 10

还有一段:  
   
  #include   <windows.h>;  
   
  OSVERSIONINFO   OSInfo;  
   
  memset(&OSInfo,   0,   sizeof(OSInfo));  
   
  //   Set   size  
  OSInfo.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFO);  
   
  if(::GetVersionEx((OSVERSIONINFO   *)   &OSInfo)   ==   FALSE)  
      return   false;  
   
  switch(OSInfo.dwPlatformId)  
  {  
      case   VER_PLATFORM_WIN32_NT:  
          if(OSInfo.dwMajorVersion   <=   4)  
              //   Microsoft   Windows   NT  
   
          if((OSInfo.dwMajorVersion   ==   5)   &&   (!OSInfo.dwMinorVersion))  
              //   Microsoft   Windows   2000  
   
          if((OSInfo.dwMajorVersion   ==   5)   &&   (OSInfo.dwMinorVersion   ==   1))  
              //   Microsoft   Windows   XP  
   
          break;  
   
      case   VER_PLATFORM_WIN32_WINDOWS:  
          if((OSInfo.dwMajorVersion   ==   4)   &&   (!OSInfo.dwMinorVersion))  
              if(OSInfo.szCSDVersion[1]   ==   'C')  
                  //   Microsoft   Windows   95   OSR2  
              else  
                  //   Microsoft   Windows   95  
   
          if((OSInfo.dwMajorVersion   ==   4)   &&   (OSInfo.dwMinorVersion   ==   10))  
              if(OSInfo.szCSDVersion[1]   ==   'A')  
                  //   Microsoft   Windows   98   SE  
              else  
                  //   Microsoft   Windows   98  
   
          if((OSInfo.dwMajorVersion   ==   4)   &&   (OSInfo.dwMinorVersion   ==   90))  
              //   Microsoft   Windows   ME  
   
          break;  
   
      case   VER_PLATFORM_WIN32s:  
          //   Microsoft   Win32s  
   
      break;  
  }  
  Top

相关问题

  • 调用判断程序
  • 如何判断程序已打开,
  • 怎样判断默认程序
  • 程序判断为何不正确呢
  • 怎样判断程序已打开
  • 如何判断一个程序是Win32程序?
  • 怎样判断当前程序在不在active以及怎样判断程序最小化了。
  • vb中如何判断本程序窗口是否是当前程序窗口?
  • 在c#的Windows程序中怎么判断程序已经启动啊?
  • 如何在delph程序中判断程序运行了多少时间??

关键词

  • win2000
  • win32
  • sql
  • osinfo
  • osvi
  • osversioninfo
  • osversioninfoex
  • dwosversioninfosize
  • getversionex
  • win

得分解答快速导航

  • 帖主:uaiia
  • JennyVenus
  • mostneed
  • mostneed

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo