Parecchio tempo fa (quindi non chiedermi dove) ho trovato il codice che fa proprio quello che dici tu:
codice:
char* getWindowsVers(){
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
char *temp;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}
switch (osvi.dwPlatformId)
{
// Test for the Windows NT product family.
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
temp = "Microsoft Windows Server 2003 family";
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
temp= "Microsoft Windows XP ";
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
temp= "Microsoft Windows 2000 ";
if ( osvi.dwMajorVersion <= 4 )
temp= "Microsoft Windows NT ";
// Test for specific product on Windows NT 4.0 SP6 and later.
if( bOsVersionInfoEx )
{
// Test for the workstation type.
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
if( osvi.dwMajorVersion == 4 )
lstrcat(temp,"Workstation ");
else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
lstrcat(temp,"Home Edition ");
else
lstrcat(temp,"Professional ");
}
}
// Test for the Windows 95 product family.
case VER_PLATFORM_WIN32_WINDOWS:
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
temp = "Microsoft Windows 95 ";
if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
lstrcat(temp,"OSR2 " );
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
temp = "Microsoft Windows 98 ";
if ( osvi.szCSDVersion[1] == 'A' )
lstrcat(temp,"SE " );
}
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
temp = "Microsoft Windows ME";
}
break;
case VER_PLATFORM_WIN32s:
temp = "Microsoft Win32s";
break;
}
return temp;
}