获取Windows系统版本号

GetVersionEx function

最好不要用这个API因为微软已经抛弃掉了,原话是这么说的:

[GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper functions]

也就是从Win8.1开始不支持了,无论是Win8.1还是Win10,调用这个API返回的版本号是错误的。可以使用清单来解决这个问题,具体参考:https://msdn.microsoft.com/zh-cn/library/windows/desktop/dn481241(v=vs.85).aspx

RtlGetNtVersionNumbers

首先声明,这并不是一个文档化的函数,不包含在任何头文件中。需要从动态链接库ntdll.dll中加载。

下面给出实例:

bool getSysInfo(DWORD *dwMajorVersion,DWORD *dwMinorVersion,DWORD *dwBuildNumber) { //主版本号、次版本号、内部版本号
	HMODULE hm;
	if (hm = LoadLibrary(L"ntdll.dll")) {
		typedef void (WINAPI *getver)(DWORD*, DWORD*, DWORD*);
		getver gv = (getver)GetProcAddress(hm, "RtlGetNtVersionNumbers");
		if (gv){
			DWORD test;
			gv(dwMajorVersion, dwMinorVersion, dwBuildNumber);
			*dwBuildNumber &= 0xffff;//内部版本号应该要取低16位
			FreeLibrary(hm);
			return TRUE;
		}
		else { GetErrorMessage(GetLastError(),0); }
		FreeLibrary(hm);
	}
	return FALSE;
}

运行结果:

获取Windows系统版本号_第1张图片

获取Windows系统版本号_第2张图片

你可能感兴趣的:(windows编程)