GetVersionEx - Вы не можете получить немного быстрее, чем это для получения основного номера версии ОС.Но вы правы, вы не сможете отобразить новые версии ОС на правильную строку.Рассматривали ли вы просто сделать это:
OSVERSIONINFOEX version = {};
char szOS[MAX_OS_LENGTH];
version.dwOSVersionInfoSize = sizeof(version);
GetVersionEx((OSVERSIONINFO*)&version);
if (MyFunctionToMapVersionToString(&version, szOS) == false)
{
sprintf(szOS, "Microsoft Windows %d.%d", version.dwMajorVersion, version.dwMinorVersion);
}
WMI - немного больше кода для записи.Но вы, вероятно, могли бы просто сделать это при запуске приложения (или когда это необходимо) и кэшировать результат, если информация снова понадобится.Не похоже, что имя продукта операционной системы изменится после того, как приложение запросит его один раз.:) Что касается обратной совместимости, я уверен, что она отлично работает на старых операционных системах ... но вы собираетесь протестировать ее перед отправкой клиенту, верно?
Если вы хотите недокументированный способ,есть раздел реестра, в котором есть именно то, что вы хотите:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion ("ProductName")