GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 2832|回复: 2

获取系统版本号

[复制链接]
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-2-26 16:27:40 | 显示全部楼层 |阅读模式
    获取系统版本是一个很基础的功能吧,因为要跨平台,所以就查了下资料,相对来说,Linux比较简单。
    1. #ifdef WIN32
    2. #include <windows.h>
    3. static char * _T(char *s){return s;}
    4. static char *const_getSystemVersion()
    5. {
    6. SYSTEM_INFO info;                                   //用SYSTEM_INFO结构判断64位AMD处理器
    7. GetSystemInfo(&info);                               //调用GetSystemInfo函数填充结构
    8. OSVERSIONINFOEX os;
    9. os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);  /*在调用函数前必须用sizeof(OSVERSIONINFOEXA)填充dwOSVersionInfoSize结构成员*/
    10. if(GetVersionEx((OSVERSIONINFO *)&os))                  /*调用GetVersionEx函数OSVERSIONINFOEX结构必须将指针类型强制转换*/
    11. {
    12. char * vname;
    13. //下面根据版本信息判断操作系统名称
    14. switch(os.dwMajorVersion){                        //判断主版本号
    15. case 4:
    16. switch(os.dwMinorVersion){                //判断次版本号
    17. case 0:
    18. if(os.dwPlatformId==VER_PLATFORM_WIN32_NT)
    19. vname=_T("Microsoft Windows NT 4.0");                //1996年7月发布
    20. else if(os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
    21. vname=_T("Microsoft Windows 95");
    22. break;
    23. case 10:
    24. vname=_T("Microsoft Windows 98");
    25. break;
    26. case 90:
    27. vname=_T("Microsoft Windows Me");
    28. break;
    29. }
    30. break;
    31. case 5:
    32. switch(os.dwMinorVersion){               //再比较dwMinorVersion的值
    33. case 0:
    34. vname=_T("Microsoft Windows 2000");                    //1999年12月发布
    35. break;
    36. case 1:
    37. vname=_T("Microsoft Windows XP");                    //2001年8月发布
    38. break;
    39. case 2:
    40. if(os.wProductType==VER_NT_WORKSTATION &&
    41. info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
    42. vname=_T("Microsoft Windows XP Professional x64 Edition");
    43. else if(GetSystemMetrics(SM_SERVERR2)==0)
    44. vname=_T("Microsoft Windows Server 2003");        //2003年3月发布
    45. else if(GetSystemMetrics(SM_SERVERR2)!=0)
    46. vname=_T("Microsoft Windows Server 2003 R2");
    47. break;
    48. }
    49. break;
    50. case 6:
    51. switch(os.dwMinorVersion){
    52. case 0:
    53. if(os.wProductType==VER_NT_WORKSTATION)/*
    54. VER_NT_WORKSTATION是桌面系统 */
    55. vname=_T("Microsoft Windows Vista");
    56. else
    57. vname=_T("Microsoft Windows Server 2008");          //服务器版本
    58. break;
    59. case 1:
    60. if(os.wProductType==VER_NT_WORKSTATION)
    61. vname=_T("Microsoft Windows 7");
    62. else
    63. vname=_T("Microsoft Windows Server 2008 R2");
    64. break;
    65. }
    66. break;
    67. default:
    68. vname=_T("未知Windows操作系统");
    69. }
    70. return vname;
    71. }
    72. else
    73. return _T("获取系统版本失败!");
    74. }
    75. #endif
    76. #ifdef __linux__
    77. static char *const_getSystemVersion()
    78. {
    79. static char *version = NULL;
    80. if (version) return version;
    81. FILE *fp = fopen("/etc/issue", "r");
    82. if (!fp) {
    83. version = "未知的Linux操作系统";
    84. return version;
    85. }
    86. version = g_new(char, 100);
    87. memset(version, 0, sizeof(char) * 100);
    88. fgets(version, 99, fp);
    89. fclose(fp);
    90. return version;
    91. }
    92. #endif
    复制代码
    转自:http://www.awaysoft.com/taor/%e6 ... 9c%ac%e5%8f%b7.html

    该用户从未签到

    发表于 2012-2-28 16:59:21 | 显示全部楼层
    关于Windows下获取系统信息我想请教个问题,如何获取计算机MAC地址呢?之前我有用过VC下的获取系统信息方式,但Mingw如果使用VC的库会有一系列问题,譬如:重定义问题等。

    该用户从未签到

    发表于 2012-2-28 17:51:57 | 显示全部楼层
    关于MAC的问题解决掉了,总以为用的的VC的库,忘记了Mingw是包含很多常用的这种库。。。。libnetapi32.a包含了。。
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-11-23 16:05 , Processed in 0.019691 second(s), 7 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表