获取PC Windows系统版本:
下面是具体实现:
bool GetOsVersion(int* major, int* minor, int* build) {
OSVERSIONINFO info = {0};
info.dwOSVersionInfoSize = sizeof(info);
if (GetVersionEx(&info)) {
if (major)
*major = info.dwMajorVersion;
if (minor)
*minor = info.dwMinorVersion;
if (build)
*build = info.dwBuildNumber;
return true;
}
return false;
}
enum WindowsMajorVersions {
kWindows2000 = 5,
kWindowsVista = 6,
kWindows10 = 10,
};
inline bool IsWindowsVistaOrLater() {
int major;
return (GetOsVersion(&major, nullptr, nullptr) && major >= kWindowsVista);
}
inline bool IsWindowsXpOrLater() {
int major, minor;
return (GetOsVersion(&major, &minor, nullptr) &&
(major >= kWindowsVista || (major == kWindows2000 && minor >= 1)));
}
inline bool IsWindows8OrLater() {
int major, minor;
return (GetOsVersion(&major, &minor, nullptr) &&
(major > kWindowsVista || (major == kWindowsVista && minor >= 2)));
}
inline bool IsWindows10OrLater() {
int major;
return (GetOsVersion(&major, nullptr, nullptr) && (major >= kWindows10));
}
除此之外还有其他办法,例如:
// 1) Check if Windows version is Vista SP1 or later.
//
// CoreAudio is only available on Vista SP1 and later.
//
OSVERSIONINFOEX osvi;
DWORDLONG dwlConditionMask = 0;
int op = VER_LESS_EQUAL;
// Initialize the OSVERSIONINFOEX structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osvi.dwMajorVersion = 6;
osvi.dwMinorVersion = 0;
osvi.wServicePackMajor = 0;
osvi.wServicePackMinor = 0;
osvi.wProductType = VER_NT_WORKSTATION;
// Initialize the condition mask.
VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op);
VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, op);
VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, op);
VER_SET_CONDITION(dwlConditionMask, VER_PRODUCT_TYPE, VER_EQUAL);
DWORD dwTypeMask = VER_MAJORVERSION | VER_MINORVERSION |
VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR |
VER_PRODUCT_TYPE;
// Perform the test.
BOOL isVistaRTMorXP = VerifyVersionInfo(&osvi, dwTypeMask, dwlConditionMask);
if (isVistaRTMorXP != 0) {
RTC_LOG(LS_VERBOSE)
<< "*** Windows Core Audio is only supported on Vista SP1 or later"
<< " => will revert to the Wave API ***";
return false;
}
尽管微软的新一代操作系统命名为Windows 10,但在内核版本方面其实变化不大。此前发布的三个技术预览版Windows 10的内核版本均为6.4,而Win 8.1的内核版本则是6.3,这似乎意味着内核方面并未改变太多。
不过这个情况在下一次Win10预览版更新时候应该就会发生改变了,根据报道,目前微软内部已经完成了Build 9888版Win10的编译工作,其内核已经从6.4升级为10.0,怒刷了一次版本号。
此外,微软也在IE开发者中心发布了通知,宣布Winddows NT内核版本号将从6.4提升到10.0。
这应该是迄今为止微软对Windows内核版本所做的最大一次变动了,看来微软对Win10是下了血本,尽最大的努力让它获得成功。
下面是最近几代Windows的内核版本号:
Windows Vista:6.0
Windows 7:6.1
Windows 8:6.2
Windows 8.1:6.3
Windows 10 Build 9841/9860/9879:6.4
Windows 10 Build 9888:10.0
PS:http://news.mydrivers.com/1/338/338566.htm
PS:Windows版本号列表