C++ 获取系统版本号

因用到系统版本号,区别对待。

// 5.0 Windows 2000";
    // 5.1 Windows XP";
    // 5.2 Windows 2003";
    // 6.0 Windows Vista";
    // 6.1 Windows 7";
    // 6.2 Windows 8";
    // 6.3 Windows 8.1";
    // 10.0 Windows 10";
    //其他版本

方法1:

此方法是测下来 XP、win7、win10都通过的方法。

DWORD Major,Minor,Build;void GetOSVersion1()
{
    _asm
    {
        pushad
        mov ebx, fs:[0x18]; get self pointer from TEB
        mov eax, fs:[0x30]; get pointer to PEB / database
        mov ebx, [eax + 0A8h]; get OSMinorVersion
        mov eax, [eax + 0A4h]; get OSMajorVersion
        mov Minor, ebx
        mov Major, eax
        popad
    }
    Build = 0;
}

方法2:

DWORD Major,Minor,Build;

typedef NTSTATUS(WINAPI* _NtQueryInformationProcess)
(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass,
    _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength);
_NtQueryInformationProcess NtQueryInformationProcess_;

DWORD GetProcessPEBAddress(HANDLE hProc)
{
    PROCESS_BASIC_INFORMATION peb;
    DWORD tmp;
    NtQueryInformationProcess_ = (_NtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationProcess");
    NtQueryInformationProcess_(hProc, ProcessBasicInformation, &peb, sizeof(PROCESS_BASIC_INFORMATION), &tmp);
    return (DWORD)peb.PebBaseAddress;
}

void GetOSVersionByHandle(HANDLE handle)
{
    DWORD pebAddress = GetProcessPEBAddress(handle);
    DWORD OSMajorVersionAddress = pebAddress + 0x0a4;
    DWORD OSMinorVersionAddress = pebAddress + 0x0a8;
    DWORD OSBuildNumberAddress = pebAddress + 0x0ac;
    ReadProcessMemory(handle, (void*)OSMajorVersionAddress, &Major, sizeof(Major), 0);
    ReadProcessMemory(handle, (void*)OSMinorVersionAddress, &Minor, sizeof(Minor), 0);
    ReadProcessMemory(handle, (void*)OSBuildNumberAddress, &Build, sizeof(Build), 0);
}

void GetOSVersion2()
{
    HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
    GetOSVersionByHandle(handle);
}

方法3:

GetVersionEx在win10版本以后,已经失效。

DWORD Major,Minor,Build;

void GetOSVersion3()
{
    OSVERSIONINFO osvi;                    //定义OSVERSIONINFO数据结构对象
    memset(&osvi, 0, sizeof(OSVERSIONINFO));        //开空间
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);    //定义大小
    GetVersionEx(&osvi);                    //获得版本信息

    Major = osvi.dwMajorVersion;
    Minor = osvi.dwMinorVersion;
    Build = osvi.dwBuildNumber;
}

                         

编译xp的运行程序 需要设置工程的属性:

原文地址:https://www.cnblogs.com/Bachelor/p/11290159.html

时间: 2024-10-10 00:15:37

C++ 获取系统版本号的相关文章

win10 系统下获取系统版本号为6.2的问题

近期赶时髦升级了win10,用着挺爽.但是某天在测试一个bug时发现要对win10做特殊处理,于是直接调用了GetVersionEx,并取出版本号进行判断,但是发现得到的版本竟然是6.2.当时就被雷到了,然后看了我们的其它产品中相关功能,皆获取的是6.2. 在搜索一会儿之后,发现这是微软故意做的设定,GetVersionEx函数可能在Win8.1之后会取消,推荐程序员们使用Version Helper APIs ,所以在8.1之后的系统中此函数的行为改变了,如果程序没有加上正确的manifest

android获取系统版本号

应用场景:1.在界面中显示应用程序的版本号:2.用户启动该应用,后台判断该应用是否是最新版本.上述情景都需要在程序中自动获取到应用的版本号. 思路简介:在Android中,应用程序的版本号是在AndroidManifest.xml文件中进行配置的,而PackageInfo类则封装了从该配置文件中获取的所有信息,描述了包内容的整体信息,因此,可以使用PackageInfo对象的versionName属性获取应用的版本号.要怎么获取PackageInfo对象呢?可以通过PackageManager对

获取系统版本号

1 string GetMainProgInfo() 2 { 3 string strRet; 4 TCHAR szPath[MAX_PATH]; 5 GetModuleFileName(NULL,szPath,MAX_PATH); 6 7 //根据主程序路径获取版本信息 8 DWORD dwHandle = 0; 9 DWORD dwVerSize = GetFileVersionInfoSize(szPath,&dwHandle); 10 if (dwVerSize > 0) 11 {

C#获取本机信息(本机名称,系统版本号,联网状态,IP地址)

C#获取本机信息 1.新建一个Window窗体应用程序,添加ListBox控件,命名为lb_MyInfo. 2.添加以下函数: /// <summary> /// 获取本机相关信息 /// </summary> void get_LocalInfo() {     //清除items项     lb_Mynfo.Items.Clear();     lb_Mynfo.Items.Add("----------------------------本机信息----------

python获取系统信息模块详解

python是跨平台语言,有时候我们的程序需要运行在不同系统上,例如:linux.MacOs. Windows,为了使程序有更好通用性,需要根据不同系统使用不同操作方式.我们可以使用platform模块来获取系统信息.platform是python自带模块,我们可以直接使用,下面来介绍这个模块:首先导入模块:import platform,常用方法如下: 方法 说明 platform.platform() 获取操作系统及版本信息 platform.version() 获取系统版本号 platfo

android 获取手机型号,本机电话号码,SDK版本以及firmwarw版本号(即系统版本号)

Android开发平台中,可通过TelephonyManager 获取本机号码. 1 TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 2 txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号 注: 根据Android的安全机制,在使用Tel

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)

Android开发平台中,可通过TelephonyManager 获取本机号码. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号 注: 根据Android的安全机制,在使用Telepho

获取设备IMEI ,手机名称,系统SDK版本号,系统版本号

1.获取设备IMEI TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String IMEIs = tm.getDeviceId() ; 需要的权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> 运行结果: 8

Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类

最近在开发中,需要用到一些系统信息,这里我把这些方法写成一个工具类方便以后复用,该工具类有以下6个功能: 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串号 6.获取手机中的语言列表 SystemUtil类 [java] view plain copy /** * 系统工具类 * Created by zhuwentao on 2016-07-18. */ public class SystemUtil { /**