Как узнать версию Windows

Для определения версии текущей запущенной операционной системы можно воспользоваться функцией GetVersionEx

#include <windows.h>
#include <stdio.h>

#define BUFSIZE 80

BOOL DisplaySystemVersion()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;

//Пытаемся вызвать GetVersionEx используя структуру OSVERSIONINFOEX.
//В случае ошибки пытаемся проделать тоже самое со структурой OSVERSIONINFO.

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
// Если OSVERSIONINFOEX не работает, то используем OSVERSIONINFO.
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}

switch (osvi.dwPlatformId)
{
// Проверяем семейство Windows NT.
case VER_PLATFORM_WIN32_NT:

// Проверяем версию продукта.

if ( osvi.dwMajorVersion <= 4 )
printf("Microsoft Windows NT ");

if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
printf ("Microsoft Windows 2000 ");


if( bOsVersionInfoEx ) // Используем информацию из GetVersionEx.
{
// Проверяем тип рабочей станции.
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
printf ("Microsoft Windows XP ");

if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
printf ( "Home Edition " );
else
printf ( "Professional " );
}

// Проверяем тип сервера.
else if ( osvi.wProductType == VER_NT_SERVER )
{
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
printf ("Microsoft Windows .NET ");

if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
printf ( "DataCenter Server " );
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
if( osvi.dwMajorVersion == 4 )
printf ("Advanced Server " );
else
printf ( "Enterprise Server " );
else if ( osvi.wSuiteMask == VER_SUITE_BLADE )
printf ( "Web Server " );
else
printf ( "Server " );
}
}
else // Для ранних версий Windows NT используем реестр.
{
HKEY hKey;
char szProductType[BUFSIZE];
DWORD dwBufLen=BUFSIZE;
LONG lRet;

lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
0, KEY_QUERY_VALUE, &hKey );
if( lRet != ERROR_SUCCESS )
return FALSE;

lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
(LPBYTE) szProductType, &dwBufLen);
if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
return FALSE;

RegCloseKey( hKey );

if ( lstrcmpi( "WINNT", szProductType) == 0 )
printf( "Professional " );
if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
printf( "Server " );
if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
printf( "Advanced Server " );
}

// Отображаем версию, service pack (если есть), и номер билда.

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;

// Проверяем семейство Windows 95.
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 Millennium Edition ");
}
break;
}
return TRUE;
Читайте также:
  • Низкоуровневые процедуры обработки звука
    Ниже приведен код, обрабатывающий аудиосигнал, получаемый со входа звуковой карты (SoundBlaster). Надеюсь он поможет разобраться вам с этой сложной темой. Включенный в код модуль RECUNIT делает всю изнурительную работу по извлечению звука со входа звуковой карты.       Var WaveRe...
  • Использование анимированных курсоров
    (mycursor.ani - файл, содержащий анимированный курсор. Вы можете создать его с помощью программы Microsoft aniedit.exe) const crMyCursor = 1;procedure TForm1.FormCreate(Sender: TObject);begin // Загружаем курсор. Единственный способ для этого Screen.Cursors[crMyCursor] :=LoadCursorFromFile('c...
  • Определение и использование курсора
    Сначала (поскольку многие попадаются в эту ловушку) убедитесь в том, что имя .RES-файла, в котором вы храните ваш курсор, отличается от имени .RES-файла вашего проекта, т.е., если ваш проект имеет имя MyApp.DPR, то не используйте для хранения новых ресурсов файл MyApp.RES. Вы должны создать отдел...
  • Как минимизиpовать все запущеные окна
    /* Hачало (MINIMIZE.DPR){$APPTYPE CONSOLE}program Minimize;uses Windows,Messages;var Count:integer;function EnumProc (WinHandle: HWnd; Param: LongInt): Boolean; stdcall;begin if (GetParent (WinHandle) = 0) and (not IsIconic (WinHandle)) and (IsWindowVisible (WinHandle)) then begin PostMessage (...
  • Выключение питания ATX коpпуса из-под DOS
    mov ax,5301h sub bx,bx int 15h jb stop mov ax,530eh sub bx,bx int 15h jb stop mov ax,5307h mov bx,0001h mov cx,0003h int 15h stop: int 20h...