原文链接: http://www.greensoftcode.net/techntxt/2014315195331643021849

#include <Windows.h>
include <stdio.h>
#include <tchar.h>
#include <conio.h>

#include "stdafx.h"
#include "osVersion.h"
#include "osVersionDlg.h"

void getOsVersion(char* szOSName)
{
 DWORD  dwMajorVersion;
 DWORD   dwMinorVersion;
 DWORD  dwBuildNumber;
    DWORD  dwPlatformId;
 OSVERSIONINFO osvi;//定义OSVERSIONINFO数据结构对象
 memset(&osvi, 0, sizeof(OSVERSIONINFO));//开空间 
 osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);//定义大小 
 GetVersionEx (&osvi);//获得版本信息 
 dwMajorVersion=osvi.dwMajorVersion;//主版本号
 dwMinorVersion=osvi.dwMinorVersion;//副版本
 dwBuildNumber=osvi.dwBuildNumber;//创建号
 dwPlatformId=osvi.dwPlatformId;//ID号
 char swVersion[10]={0};    
 sprintf(swVersion,"%d.%d",dwMajorVersion,dwMinorVersion);
   // dwVesion=atoi(swVersion);  
 
     if (!strcmp(swVersion,"4.0"))   strcpy( szOSName,"win95");    //win95    
     if (!strcmp(swVersion,"4.1")) strcpy( szOSName,"win98");     //win98 
     if (!strcmp(swVersion,"4.9")) strcpy( szOSName,"win_me");     // win_me 
     if (!strcmp(swVersion,"3.51")) strcpy( szOSName,"win_Nt_3_5");  //win_Nt_3_5    
     if (!strcmp(swVersion,"5.0"))  strcpy( szOSName,"win2000");    //win2000   
  if (!strcmp(swVersion,"5.1"))   strcpy( szOSName,"win_xp");    //win_xp 
   if (!strcmp(swVersion,"5.2"))  strcpy( szOSName,"win2003");    // win2003 
     if (!strcmp(swVersion,"6.6"))   strcpy(szOSName,"vista");    //vista
  if (!strcmp(swVersion,"6.1"))   strcpy( szOSName,"win7");     // win7 
  if (!strcmp(swVersion,"6.1"))   strcpy( szOSName,"win8");      // win8

}

#define __in  
#define __out
 
#define MS_PROCESSOR_ARCHITECTURE_IA64             6
#define MS_PROCESSOR_ARCHITECTURE_AMD64          9
 
// 安全的取得真实系统信息
VOID SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo)
{
 if (NULL==lpSystemInfo) return;
 typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
 LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");;
 if (NULL != fnGetNativeSystemInfo)
 {
  fnGetNativeSystemInfo(lpSystemInfo);
 }
 else
 {
  GetSystemInfo(lpSystemInfo);
 }
}

// 获取操作系统位数
int GetSystemBits()
{
 SYSTEM_INFO si;
 SafeGetNativeSystemInfo(&si);
  if (si.wProcessorArchitecture == MS_PROCESSOR_ARCHITECTURE_AMD64 ||
    si.wProcessorArchitecture == MS_PROCESSOR_ARCHITECTURE_IA64 )
 
 {
  return 64;
 }
 return 32;
}

void COsVersionDlg::OnButton1() 
{
 // TODO: Add your control notification handler code here
 char szOSVersion[40]={0};
    getOsVersion(szOSVersion);  //获得操作系统名称
 
 int lzBit=GetSystemBits(); // 获取操作系统位数

}

VC获得window操作系统版本号, 获取操作系统位数的更多相关文章

  1. python开发_platform_获取操作系统详细信息工具

    ''' python中,platform模块给我们提供了很多方法去获取操作系统的信息 如: import platform platform.platform() #获取操作系统名称及版本号,'Win ...

  2. NTDLL未文档化函数RtlGetNtVersionNumbers获取操作系统版本

    作为新手,对获取操作系统版本号好奇过,因为曾经假象过一个场景:自己的程序在windows xp环境下编译,在windows 2003, windows 7,windows 8是否需要提权或者兼容处理, ...

  3. 获取操作系统版本Asp.Net

    /// <summary> /// 获取操作系统版本号 /// </summary> /// <returns></returns> public st ...

  4. 批量ssh登录,获取操作系统、CPU、内存、硬盘信息<shell>

    说明:该脚本读取machine.txt文件中的机器名,然后批量ssh登录,获取每台机器的操作系统,CPU,内存,硬盘等信息. 使用方法:将文件保存为sh,chmod +x filename 为该sh文 ...

  5. Js获取操作系统版本 && 获得浏览器版本

    //利用原生Js获取操作系统版本function getOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.plat ...

  6. C# 获取操作系统相关信息

    1.获取操作系统版本(PC,PDA均支持) Environment.OSVersion 2.获取应用程序当前目录(PC支持) Environment.CurrentDirectory 3.列举本地硬盘 ...

  7. 根据UserAgent 获取操作系统名称

    /// <summary>        /// 根据 User Agent 获取操作系统名称        /// </summary>        private sta ...

  8. .NET Core 获取操作系统各种信息

    .NET Core 获取操作系统各种信息 一.前言 .NET Core 内置了一些API供我们获取操作系统.运行时.框架等信息.这些API不是很常用,所有有些小伙伴可能还不知道,这里做一些可能用到的获 ...

  9. C# 获取操作系统相关的信息

    本文通过一个Demo,讲解如何通过C#获取操作系统相关的信息,如内存大小,CPU大小,机器名,环境变量等操作系统软件.硬件相关信息,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点: Envir ...

随机推荐

  1. mybatis异常 :元素内容必须由格式正确的字符数据或标记组成。

    今天同事写一个查询接口的时候,出错:元素内容必须由格式正确的字符数据或标记组成. 错误原因:mybatis查询的时候,需要用到运算符 小于号:< 和  大于号: >,在mybatis配置文 ...

  2. 图解vue中 v-for 的 :key 的作用,虚拟dom Diff算法

    其实不只是vue,react中在执行列表渲染时也会要求给每个组件添加上key这个属性. 要解释key的作用,不得不先介绍一下虚拟DOM的Diff算法了. 我们知道,vue和react都实现了一套虚拟D ...

  3. IOS之导航控制器传值

    UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显 ...

  4. WebClient.DownloadData突然失灵

      有如下的代码: try { byte[] acsMetadata; using (WebClient webClient = new WebClient()) { acsMetadata = we ...

  5. 8. 利用反射机制, ListArray,intent来实现多Activity的切换

    package com.example.thenewboston; import android.app.ListActivity; import android.content.Intent; im ...

  6. C#.NET常见问题(FAQ)-程序不包含适合于入口点的静态“Main”方法怎么办

    如下图所示,一般程序上次运行还好好的,而且不管你复制粘贴再简单的程序也出现这种错误提示.   先点击右侧的显示所有文件,下面列举了所有CS文件,右击点击包括在项目中,则该文件呈现绿色,再运行即可.不过 ...

  7. RPM 命令大全

    RPM 大全RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件包通常具有类似foo-1.0-1.i ...

  8. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)

    题意:给定点的上下级关系,规定假设给i分配任务a.那么他的全部下属.都停下手上的工作,開始做a. 操作 T x y 分配x任务y,C x询问x的当前任务: Sample Input 1 5 4 3 3 ...

  9. org.dom4j.DocumentException:对实体 "virtual_card_id" 的引用必须以 ';' 分隔符结尾

      Error on line 1 of document  : 对实体 "virtual_card_id" 的引用必须以 ';' 分隔符结尾. CreateTime--2018年 ...

  10. ORACLE检查死锁

    一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错.二.死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更 ...