// OS Version // // Douglas Thrift // // OSVersion.cpp #include #include #include #include #include #ifndef _WIN32 #include #else #include #endif // _WIN32 using namespace std; int main(int argc, char* argv[]) { string os; string version; string architecture; string marketing; #ifdef _WIN32 OSVERSIONINFO* computer = new OSVERSIONINFO; computer->dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(computer); os = computer->dwPlatformId == VER_PLATFORM_WIN32_NT ? "Windows NT" : "Windows"; unsigned major = computer->dwMajorVersion; unsigned minor = computer->dwMinorVersion; delete computer; SYSTEM_INFO* system = new SYSTEM_INFO; GetSystemInfo(system); switch (system->wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL: architecture = "ix86"; break; case PROCESSOR_ARCHITECTURE_MIPS: architecture = "mips"; break; case PROCESSOR_ARCHITECTURE_ALPHA: architecture = "alpha"; break; case PROCESSOR_ARCHITECTURE_PPC: architecture = "ppc"; break; case PROCESSOR_ARCHITECTURE_IA64: architecture = "ia64"; break; case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: architecture = "ix86_on_win64"; break; case PROCESSOR_ARCHITECTURE_AMD64: architecture = "amd64"; break; default: architecture = "unknown"; break; } char* cversion = new char[1024]; sprintf(cversion, "%u.%u", major, minor); version = cversion; delete [] cversion; if (major == 4 && minor <= 3 && os != "Windows NT") { marketing = " [Windows 95]"; } else if (major == 4 && minor == 10 && os != "Windows NT") { marketing = " [Windows 98]"; } else if (major == 5 && minor == 0 && os == "Windows NT") { marketing = " [Windows 2000]"; } else if (major == 4 && minor == 90 && os != "Windows NT") { marketing = " [Windows ME]"; } else if (major == 5 && minor == 1 && os == "Windows NT") { marketing = " [Windows XP]"; } else if (major == 5 && minor == 2 && os == "Windows NT") { marketing = " [Windows .NET Server]"; } #else // _WIN32 struct utsname* computer = new struct utsname; uname(computer); os = computer->sysname; version = computer->release; architecture = computer->machine; delete computer; #endif // _WIN32 cout << os << " " << version << marketing << " " << architecture << "\n"; return 0; }