/* * Use the GetVersionEx() Win32 API call to show information about * which version of Windows we're running (or which version of Windows * Wine believes it is masquerading as). * * Copyright 1999 by Morten Eriksen * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include void show_last_error(void) { DWORD lasterr; LPTSTR buffer; BOOL result; lasterr = GetLastError(); result = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lasterr, 0, (LPTSTR)&buffer, 0, NULL); if (result) { fprintf(stderr, "Win32 API error (%ld):\t%s", lasterr, buffer); LocalFree((HLOCAL)buffer); } else { fprintf(stderr, "Win32 API error (%ld)", lasterr); } } int main(int argc, char ** argv) { BOOL result; OSVERSIONINFO oiv; /* FIXME: GetVersionEx() is a Win32 API call, so there should be a preliminary check to see if we're running bare-bones Windows3.xx (or even lower?). 19990916 mortene. */ oiv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); result = GetVersionEx(&oiv); if (result == FALSE) { show_last_error(); } else { char * platforms[] = { "Win32s on Windows 3.1", "Win32 on Windows 95 or Windows 98", "Win32 on Windows NT/Windows 2000", "unknown!" }; int platformval = 3; switch (oiv.dwPlatformId) { case VER_PLATFORM_WIN32s: platformval = 0; break; case VER_PLATFORM_WIN32_WINDOWS: platformval = 1; break; case VER_PLATFORM_WIN32_NT: platformval = 2; break; } fprintf(stdout, "MajorVersion: %ld\nMinorVersion: %ld\nBuildNumber: 0x%lx\n" "Platform: %s\nCSDVersion: '%s'\n", oiv.dwMajorVersion, oiv.dwMinorVersion, oiv.dwBuildNumber, platforms[platformval], oiv.szCSDVersion); } return 0; }