CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

取得CtrlList内容问题

楼主visioz(e)2004-11-02 21:56:29 在 VC/MFC / 基础类 提问

 
  2000下可以申请内存做  
  VirtualAllocEx  
   
  98下有没有办法?  
  另外,如何判断当前系统是98还是2000/xp?  
  问题点数:0、回复次数:6Top

1 楼zhoujiamurong(有分俺就不要,俺要知识)回复于 2004-11-02 22:07:55 得分 0

Relying   on   version   information   is   not   the   best   way   to   test   for   a   feature.   Instead,   refer   to   the   documentation   for   the   feature   of   interest.   For   more   information   on   common   techniques   for   feature   detection,   see   Operating   System   Version.  
   
  If   you   must   require   a   particular   operating   system,   be   sure   to   use   it   as   a   minimum   supported   version,   rather   than   design   the   test   for   the   one   operating   system.   This   way,   your   detection   code   will   continue   to   work   on   future   versions   of   Windows.  
   
   
  #include   <windows.h>  
  #include   <stdio.h>  
   
  #define   BUFSIZE   80  
   
  int   main()  
  {  
        OSVERSIONINFOEX   osvi;  
        BOOL   bOsVersionInfoEx;  
   
        //   Try   calling   GetVersionEx   using   the   OSVERSIONINFOEX   structure.  
        //   If   that   fails,   try   using   the   OSVERSIONINFO   structure.  
   
        ZeroMemory(&osvi,   sizeof(OSVERSIONINFOEX));  
        osvi.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFOEX);  
   
        if(   !(bOsVersionInfoEx   =   GetVersionEx   ((OSVERSIONINFO   *)   &osvi))   )  
        {  
              osvi.dwOSVersionInfoSize   =   sizeof   (OSVERSIONINFO);  
              if   (!   GetVersionEx   (   (OSVERSIONINFO   *)   &osvi)   )    
                    return   FALSE;  
        }  
   
        switch   (osvi.dwPlatformId)  
        {  
              //   Test   for   the   Windows   NT   product   family.  
              case   VER_PLATFORM_WIN32_NT:  
   
                    //   Test   for   the   specific   product.  
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   2   )  
                          printf   ("Microsoft   Windows   Server   2003,   ");  
   
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   1   )  
                          printf   ("Microsoft   Windows   XP   ");  
   
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   0   )  
                          printf   ("Microsoft   Windows   2000   ");  
   
                    if   (   osvi.dwMajorVersion   <=   4   )  
                          printf("Microsoft   Windows   NT   ");  
   
                    //   Test   for   specific   product   on   Windows   NT   4.0   SP6   and   later.  
                    if(   bOsVersionInfoEx   )  
                    {  
                          //   Test   for   the   workstation   type.  
                          if   (   osvi.wProductType   ==   VER_NT_WORKSTATION   )  
                          {  
                                if(   osvi.dwMajorVersion   ==   4   )  
                                      printf   (   "Workstation   4.0   "   );  
                                else   if(   osvi.wSuiteMask   &   VER_SUITE_PERSONAL   )  
                                      printf   (   "Home   Edition   "   );  
                                else  
                                      printf   (   "Professional   "   );  
                          }  
                           
                          //   Test   for   the   server   type.  
                          else   if   (   osvi.wProductType   ==   VER_NT_SERVER   ||    
                                              osvi.wProductType   ==   VER_NT_DOMAIN_CONTROLLER   )  
                          {  
                                if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   2   )  
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_DATACENTER   )  
                                            printf   (   "Datacenter   Edition   "   );  
                                      else   if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   (   "Enterprise   Edition   "   );  
                                      else   if   (   osvi.wSuiteMask   ==   VER_SUITE_BLADE   )  
                                            printf   (   "Web   Edition   "   );  
                                      else  
                                            printf   (   "Standard   Edition   "   );  
                                }  
   
                                else   if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   0   )  
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_DATACENTER   )  
                                            printf   (   "Datacenter   Server   "   );  
                                      else   if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   (   "Advanced   Server   "   );  
                                      else  
                                            printf   (   "Server   "   );  
                                }  
   
                                else     //   Windows   NT   4.0    
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   ("Server   4.0,   Enterprise   Edition   "   );  
                                      else  
                                            printf   (   "Server   4.0   "   );  
                                }  
                          }  
                    }  
                    else     //   Test   for   specific   product   on   Windows   NT   4.0   SP5   and   earlier  
                    {  
                          HKEY   hKey;  
                          char   szProductType[BUFSIZE];  
                          DWORD   dwBufLen=BUFSIZE;  
                          LONG   lRet;  
   
                          lRet   =   RegOpenKeyEx(   HKEY_LOCAL_MACHINE,  
                                "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",  
                                0,   KEY_QUERY_VALUE,   &hKey   );  
                          if(   lRet   !=   ERROR_SUCCESS   )  
                                return   FALSE;  
   
                          lRet   =   RegQueryValueEx(   hKey,   "ProductType",   NULL,   NULL,  
                                (LPBYTE)   szProductType,   &dwBufLen);  
                          if(   (lRet   !=   ERROR_SUCCESS)   ||   (dwBufLen   >   BUFSIZE)   )  
                                return   FALSE;  
   
                          RegCloseKey(   hKey   );  
   
                          if   (   lstrcmpi(   "WINNT",   szProductType)   ==   0   )  
                                printf(   "Workstation   "   );  
                          if   (   lstrcmpi(   "LANMANNT",   szProductType)   ==   0   )  
                                printf(   "Server   "   );  
                          if   (   lstrcmpi(   "SERVERNT",   szProductType)   ==   0   )  
                                printf(   "Advanced   Server   "   );  
   
                          printf(   "%d.%d   ",   osvi.dwMajorVersion,   osvi.dwMinorVersion   );  
                    }  
   
              //   Display   service   pack   (if   any)   and   build   number.  
   
                    if(   osvi.dwMajorVersion   ==   4   &&    
                            lstrcmpi(   osvi.szCSDVersion,   "Service   Pack   6"   )   ==   0   )  
                    {  
                          HKEY   hKey;  
                          LONG   lRet;  
   
                          //   Test   for   SP6   versus   SP6a.  
                          lRet   =   RegOpenKeyEx(   HKEY_LOCAL_MACHINE,  
                                "SOFTWARE\\Microsoft\\Windows   NT\\CurrentVersion\\Hotfix\\Q246009",  
                                0,   KEY_QUERY_VALUE,   &hKey   );  
                          if(   lRet   ==   ERROR_SUCCESS   )  
                                printf(   "Service   Pack   6a   (Build   %d)\n",   osvi.dwBuildNumber   &   0xFFFF   );                    
                          else   //   Windows   NT   4.0   prior   to   SP6a  
                          {  
                                printf(   "%s   (Build   %d)\n",  
                                      osvi.szCSDVersion,  
                                      osvi.dwBuildNumber   &   0xFFFF);  
                          }  
   
                          RegCloseKey(   hKey   );  
                    }  
                    else   //   not   Windows   NT   4.0    
                    {  
                          printf(   "%s   (Build   %d)\n",  
                                osvi.szCSDVersion,  
                                osvi.dwBuildNumber   &   0xFFFF);  
                    }  
   
   
                    break;  
   
              //   Test   for   the   Windows   Me/98/95.  
              case   VER_PLATFORM_WIN32_WINDOWS:  
   
                    if   (osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   0)  
                    {  
                            printf   ("Microsoft   Windows   95   ");  
                            if   (   osvi.szCSDVersion[1]   ==   'C'   ||   osvi.szCSDVersion[1]   ==   'B'   )  
                                  printf("OSR2   "   );  
                    }    
   
                    if   (osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   10)  
                    {  
                            printf   ("Microsoft   Windows   98   ");  
                            if   (   osvi.szCSDVersion[1]   ==   'A'   )  
                                  printf("SE   "   );  
                    }    
   
                    if   (osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   90)  
                    {  
                            printf   ("Microsoft   Windows   Millennium   Edition\n");  
                    }    
                    break;  
   
              case   VER_PLATFORM_WIN32s:  
   
                    printf   ("Microsoft   Win32s\n");  
                    break;  
        }  
        return   TRUE;    
  }  
  Top

2 楼visioz(e)回复于 2004-11-02 22:11:55 得分 0

得,还是就光判断是不是98吧  
   
  怎么取得98下其他程序得ctrllist内容哪?Top

3 楼zhoujiamurong(有分俺就不要,俺要知识)回复于 2004-11-02 22:19:04 得分 0

枚举程序,枚举注册类为Ctrlist的窗体Top

4 楼visioz(e)回复于 2004-11-02 23:16:43 得分 0

前提:   已经得到了   ctrllist得句柄  
   
  问题是怎么提取内容  
   
  2000XP可以通过分配内存做  
  可是98怎么办?Top

5 楼roger_ding(海天一色)回复于 2004-11-03 09:12:22 得分 0

98下注入线程好了,取得CtrlList数据后再和原程序交换数据Top

6 楼visioz(e)回复于 2004-11-03 19:39:33 得分 0

具体怎么做啊Top

相关问题

  • 取得datagrid中内容可能么?
  • 如何取得record中的内容?
  • 如何取得DropDownListBox选中的内容?@#$
  • 如何取得http传输的内容?
  • 如何取得CDATA中的内容?
  • 如何取得表格中的内容?
  • 如何取得 Web Browser 控件的 html 文件内容?
  • 怎样用bcb取得网页中的标题等内容啊?
  • 程序中怎样取得Query组件中SQL(string)的内容?
  • 我该怎样取得“网上邻居”里的内容?

关键词

  • win32
  • microsoft
  • osvi
  • osversioninfoex
  • osversioninfo
  • dwminorversion
  • getversionex
  • dwmajorversion
  • feature
  • versions

得分解答快速导航

  • 帖主:visioz

相关链接

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

广告也精彩

反馈

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