Detect WinVersion
A console snippet that identifies the running Windows version from GetVersionEx and prints it with build number.
The classic pre-Vista version-detection routine: fill an OSVERSIONINFO, call GetVersionEx, then branch on dwPlatformId (Windows 9x versus NT) and major/minor version to name the exact release - 95, 98, ME, NT 3.x/4.x, 2000 or XP - printing the service pack string from szCSDVersion alongside. It is a period piece now since modern apps should use RtlGetVersion or API-set checks, but it remains the clearest illustration of how the old fields mapped to product names.
#include <Windows.H>
#include <WindowsX.H>
#include <Stdio.H>
#include <Stdlib.H>
void WriteOsVersion(void)
{
char Temp[257];
int TempINT;
OSVERSIONINFO os;
DWORD dwVersion;
os.dwOSVersionInfoSize=sizeof(os);
dwVersion = GetVersion();
if(GetVersionEx(&os))
{
if(os.dwPlatformId == 1)
{
if(os.dwMinorVersion == 0)
sprintf(Temp, "\t Windows 95 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
if(os.dwMinorVersion == 10)
sprintf(Temp, "\t Windows 98 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
if(os.dwMinorVersion == 90)
sprintf(Temp, "\t Windows ME %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
}
if(os.dwPlatformId == 2)
{
if(os.dwMajorVersion == 3)
sprintf(Temp, "\t Windows NT %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
if(os.dwMajorVersion == 4)
sprintf(Temp, "\t Windows NT %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
if(os.dwMajorVersion == 5 && os.dwMinorVersion == 0)
sprintf(Temp, "\t Windows 2000 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
if(os.dwMajorVersion == 5 && os.dwMinorVersion == 1)
sprintf(Temp, "\t Windows XP %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
}
}
printf("Temp = %s\n",Temp);
}
int main(int argc, char *argv[])
{
WriteOsVersion();
return 0;
}