C++/CX の UWP アプリから OS の内部バージョン(ビルド番号含む)を取得するには AnalyticsVersionInfo の DeviceFamilyVersion から下記のようなコードで取得できます。
Windows::System::Profile::AnalyticsVersionInfo^ info = Windows::System::Profile::AnalyticsInfo::VersionInfo; LPWSTR pEnd = nullptr; __int64 v = wcstoll(info->DeviceFamilyVersion->Data(), &pEnd, 10); unsigned long v1 = (v & 0xFFFF000000000000L) >> 48; unsigned long v2 = (v & 0x0000FFFF00000000L) >> 32; unsigned long v3 = (v & 0x00000000FFFF0000L) >> 16; unsigned long v4 = v & 0x000000000000FFFFL; WCHAR szVersion[1024]; swprintf_s(szVersion, L"%lu.%lu.%lu.%lu\r\n", v1, v2, v3, v4); OutputDebugStringW(szVersion);
Windows 10 のバージョン (1709や1607など) を判別するには下記のようなコードになります。
unsigned long Windows10Version = 0; if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5)) { Windows10Version = 1709; } else if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 4)) { Windows10Version = 1703; } else if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 3)) { Windows10Version = 1607; } else if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 2)) { Windows10Version = 1511; } else if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent("Windows.Foundation.UniversalApiContract", 1)) { Windows10Version = 1507; } if (Windows10Version > 0) { WCHAR szWindows10Version[1024]; swprintf_s(szWindows10Version, L"Windows 10 Version = %lu\r\n", Windows10Version); OutputDebugStringW(szWindows10Version); } else { OutputDebugStringW(L"Windows 10 Version = Unknown\r\n"); }
判別ではなく直接的に Windows 10 のバージョンを取得する方法は分かりませんでした。
UWP ではなくデスクトップアプリの場合は、レジストリから取得が可能です。
→ 参考記事 Windows のバージョンを取得を取得する