Da keine der Antworten dies erwähnt ... Ich habe herausgefunden, dass Sie unterschiedliche Berechnungen durchführen müssen, je nachdem, ob Sie auf 32- oder 64-Bit-Systemen arbeiten . Deshalb finden Sie, dass bestimmte Antworten in dieser Frage für Sie funktionieren und andere nicht.
Hier ist eine Beispielimplementierung, die ich verwende:
if(IsWow64())
{
major = (verInfo->dwProductVersionMS >> 16) & 0xffff;
minor = (verInfo->dwProductVersionMS >> 0) & 0xffff;
revision = (verInfo->dwProductVersionLS >> 16) & 0xffff;
build = (verInfo->dwProductVersionLS >> 0) & 0xffff;
}
else
{
major = HIWORD(verInfo->dwProductVersionMS);
minor = LOWORD(verInfo->dwProductVersionMS);
revision = HIWORD(verInfo->dwProductVersionLS);
build = LOWORD(verInfo->dwProductVersionLS);
}
Und die Implementierung von IsWow64 (nicht von mir):
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if(NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
}
}
return bIsWow64;
}