Created
May 27, 2014 03:33
-
-
Save jsfaint/b7da6ca26e22752facf8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <windows.h> | |
#include <stdio.h> | |
BOOL DisplaySystemVersion() | |
{ | |
OSVERSIONINFOEX osvi; | |
BOOL bOsVersionInfoEx; | |
// Try calling GetVersionEx using the OSVERSIONINFOEX structure. | |
// | |
// If that fails, try using the OSVERSIONINFO structure. | |
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); | |
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); | |
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) | |
{ | |
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. | |
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); | |
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) | |
return FALSE; | |
} | |
switch (osvi.dwPlatformId) | |
{ | |
case VER_PLATFORM_WIN32_NT: | |
// Test for the product. | |
if ( osvi.dwMajorVersion <= 4 ) | |
printf("Microsoft Windows NT "); | |
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) | |
printf ("Microsoft Windows 2000 "); | |
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) | |
printf ("Microsoft Windows XP "); | |
// Test for product type. | |
if( bOsVersionInfoEx ) | |
{ | |
if ( osvi.wProductType == VER_NT_WORKSTATION ) | |
{ | |
if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) | |
printf ( "Personal " ); | |
else | |
printf ( "Professional " ); | |
} | |
else if ( osvi.wProductType == VER_NT_SERVER ) | |
{ | |
if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) | |
printf ( "DataCenter Server " ); | |
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) | |
printf ( "Advanced Server " ); | |
else | |
printf ( "Server " ); | |
} | |
} | |
else | |
{ | |
HKEY hKey; | |
char szProductType[80]; | |
DWORD dwBufLen; | |
RegOpenKeyEx( HKEY_LOCAL_MACHINE, | |
"SYSTEM\\CurrentControlSet\\Control\\ProductOptions", | |
0, KEY_QUERY_VALUE, &hKey ); | |
RegQueryValueEx( hKey, "ProductType", NULL, NULL, | |
(LPBYTE) szProductType, &dwBufLen); | |
RegCloseKey( hKey ); | |
if ( lstrcmpi( "WINNT", szProductType) == 0 ) | |
printf( "Professional " ); | |
if ( lstrcmpi( "LANMANNT", szProductType) == 0 ) | |
printf( "Server " ); | |
if ( lstrcmpi( "SERVERNT", szProductType) == 0 ) | |
printf( "Advanced Server " ); | |
} | |
// Display version, service pack (if any), and build number. | |
if ( osvi.dwMajorVersion <= 4 ) | |
{ | |
printf ("version %d.%d %s (Build %d)\n", | |
osvi.dwMajorVersion, | |
osvi.dwMinorVersion, | |
osvi.szCSDVersion, | |
osvi.dwBuildNumber & 0xFFFF); | |
} | |
else | |
{ | |
printf ("%s (Build %d)\n", | |
osvi.szCSDVersion, | |
osvi.dwBuildNumber & 0xFFFF); | |
} | |
break; | |
case VER_PLATFORM_WIN32_WINDOWS: | |
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) | |
{ | |
printf ("Microsoft Windows 95 "); | |
if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' ) | |
printf("OSR2 " ); | |
} | |
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) | |
{ | |
printf ("Microsoft Windows 98 "); | |
if ( osvi.szCSDVersion[1] == 'A' ) | |
printf("SE " ); | |
} | |
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) | |
{ | |
printf ("Microsoft Windows Me "); | |
} | |
break; | |
case VER_PLATFORM_WIN32s: | |
printf ("Microsoft Win32s "); | |
break; | |
} | |
return TRUE; | |
} | |
int main(void) | |
{ | |
DisplaySystemVersion(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment