RegistryHelper::isWindowsVersionAtLeast
bool RegistryHelper::isWindowsVersionAtLeast(unsigned major, unsigned minor)
{
if (windowsVersion == 0)
{
DWORD handle;
DWORD size = GetFileVersionInfoSizeW(L"kernel32.dll", &handle);
if (size != 0)
{
void* data = malloc(size);
if (GetFileVersionInfo(L"kernel32.dll", handle, size, data))
{
VS_FIXEDFILEINFO* info;
UINT len;
if (VerQueryValueW(data, L"\\", (LPVOID*)&info, &len))
windowsVersion = info->dwProductVersionMS;
}
free(data);
}
}
// this will only work for major and minor up to 99
DWORD compareVersion = ((major / 10) << 20) + ((major % 10) << 16) + ((minor / 10) << 4) + (minor % 10);
return windowsVersion >= compareVersion;
}
随手分享,手有余香