GetVersionEx - 基本的なOSのバージョン番号を取得するためのこれ以上の速度を得ることはできません。しかし、あなたが正しいです、あなたは正しい文字列にOSの新しいバージョンをマップすることができなくなります。
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")