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

我想得到操作系统的一些信息,如何实现?

楼主chinajuanbob(chinajuanbob)2005-03-02 18:49:58 在 VC/MFC / 基础类 提问

只要能分辨9X,2K,XP的各个版本就可以了  
  看了网上的代码,都比较复杂。想求一段尽量短小的,返回类似  
  “Microsoft   XP   Pro   Build   2600   SP2”的CString即可 问题点数:50、回复次数:5Top

1 楼kingzai(stevenzhu)回复于 2005-03-02 19:10:35 得分 10

http://www.vckbase.com/english/code/system/OSDetect.shtml.htmTop

2 楼ablewindy(我是【风子】我怕谁)回复于 2005-03-02 19:18:01 得分 20

/*********************************************************************  
  函数功能:获得操作系统版本  
  *********************************************************************/  
  BOOL   CShowSysinfoDlg::GetOSVersion(CString   &strVersion,CString   &strBuild)  
  {  
  CString   strOsVersion;  
  DWORD   winVer;  
  winVer=GetVersion();  
  OSVERSIONINFO   *osvi;  
   
  /************************************************************/  
  /*Get   the   build   number   for   Windows   NT/Windows   2000   or   Win32s*/  
  DWORD   dwWindowsMajorVersion   =     (DWORD)(LOBYTE(LOWORD(winVer)));  
  DWORD   dwWindowsMinorVersion   =     (DWORD)(HIBYTE(LOWORD(winVer)));  
  DWORD   dwBuild;  
  if   (winVer   <   0x80000000)                           //   Windows   NT/2000  
  {  
  dwBuild   =   (DWORD)(HIWORD(winVer));  
  }  
  else   if   (dwWindowsMajorVersion   <   4)                 //   Win32s  
  {  
  dwBuild   =   (DWORD)(HIWORD(winVer)   &   ~0x8000);  
  }  
  else                                     //   Windows   95/98   --   No   build   number  
  {  
  dwBuild   =     0;  
  }  
  strBuild.Format("%d",dwBuild);  
  /************************************************************/  
   
   
  if(winVer<0x80000000)  
  {/*NT   */  
  strOsVersion="WindowsNT3";  
  osvi=   (OSVERSIONINFO   *)malloc(sizeof(OSVERSIONINFO));  
  if   (osvi!=NULL)  
  {  
  memset(osvi,0,sizeof(OSVERSIONINFO));  
  osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);  
  GetVersionEx(osvi);  
  if(osvi->dwMajorVersion==4L)  
  {  
  strOsVersion="WindowsNT4";  
  }  
  else   if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)  
  {  
  strOsVersion="Windows2000";  
  }  
  else   if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)  
  {  
  strOsVersion="WindowsXP";  
  }  
  free(osvi);  
  }  
  }  
  else   if(LOBYTE(LOWORD(winVer))<4)  
  {  
  strOsVersion="Windows32s";  
  }  
  else  
  {  
  strOsVersion="Windows95";  
  osvi=   (OSVERSIONINFO   *)malloc(sizeof(OSVERSIONINFO));  
  if   (osvi!=NULL)  
  {  
  memset(osvi,0,sizeof(OSVERSIONINFO));  
  osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);  
  GetVersionEx(osvi);  
  if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)  
  {  
  strOsVersion="Windows98";  
  }  
  else   if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)  
  {  
  strOsVersion="WindowsME";  
  }  
  free(osvi);  
  }  
  }  
   
  strVersion=strOsVersion;  
   
  return   TRUE;  
   
  }  
  Top

3 楼chinajuanbob(chinajuanbob)回复于 2005-03-02 19:32:36 得分 0

我想再得到build和sp  
  怎么做?Top

4 楼chinajuanbob(chinajuanbob)回复于 2005-03-02 19:34:33 得分 0

build知道了  
  sp怎么办?Top

5 楼keiy()回复于 2005-03-02 19:46:04 得分 20

从注册表中取  
  CRegKey   m;  
    OSVERSIONINFO   VersionInfo;    
    ZeroMemory(&VersionInfo,sizeof(VersionInfo));    
    VersionInfo.dwOSVersionInfoSize=sizeof(VersionInfo);    
    GetVersionEx(&VersionInfo);    
      char   buff[200];  
      unsigned   long   l;  
      CString   ver;  
    switch   (VersionInfo.dwPlatformId){    
          {  
                  case   VER_PLATFORM_WIN32_WINDOWS:  
  m.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion");  
                          break;  
                  case   VER_PLATFORM_WIN32_NT:  
  m.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows   NT\\CurrentVersion");  
                          break;  
                  default:  
                          break;  
          }  
    }  
      l=200;  
      m.QueryValue(buff,"ProductName",&l);  
      ver=buff;  
      ver+="   ";  
      l=200;  
      m.QueryValue(buff,"CurrentVersion",&l);  
      ver+=buff;  
      ver+=".";  
      l=200;  
      m.QueryValue(buff,"CurrentBuildNumber",&l);  
      ver+=buff;  
      ver+="   ";  
      l=200;  
      m.QueryValue(buff,"CSDVersion",&l);  
      ver+=buff;  
      MessageBox(ver);Top

相关问题

  • 如何获取操作系统信息?
  • 关于我的操作系统信息.
  • 如何实现多操作系统共存??
  • 在Windows操作系统下能否实现X-Client?
  • 看过操作系统设计与实现的进来看看
  • 哪里有《操作系统设计与实现》的电子书??
  • 编程如何实现从光盘引导操作系统?
  • 4.4BSD操作系统设计与实现 这本书如何
  • 请问操作系统的API一般是如何实现的?
  • 怎么样取的操作系统的信息?

关键词

  • win32
  • nt
  • microsoft
  • osvi
  • strosversion
  • versioninfo
  • winver
  • dwmajorversion
  • dwminorversion
  • ver

得分解答快速导航

  • 帖主:chinajuanbob
  • kingzai
  • ablewindy
  • keiy

相关链接

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

广告也精彩

反馈

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