Działa w systemie Windows     WinVer 1.02           Kompilacja


Program do sprawdzania wersji systemu Windows. Wykrywa 13 podstawowych wersji Windows
(od 3.1 do 8). Został napisany w języku C za pomocą darmowego środowiska "Open Watcom 1.9".
Występuje w dwóch wersjach:

Wersja 16-bitowa (Win16)
Działa w systemie Windows 3.1 i nowszym (procesor 086+), ale nie uruchomi się w żadnym systemie
64-bitowym (np. Windows XP Professional x64). Do sprawdzania wersji systemu, program używa
funkcji WinAPI o nazwie GetVersion(). Funkcja ta zwraca wartość typu DWORD:



Starsze słowo tej wartości zawiera numer wersji systemu MS-DOS: starszy bajt to wersja (major),
a młodszy to podwersja (minor). Młodsze słowo tej wartości zawiera numer wersji systemu Windows
(nie są to prawdziwe dane): starszy bajt to podwersja (minor), a młodszy to wersja (major).
Wersja systemu Windows jest określana na podstawie wersji (major) systemu MS-DOS
(starszy bajt w starszym słowie wartości DWORD zwracanej przez funkcję GetVersion()).

Po 38 linii kodu źródłowego, wartość zmiennej "vwin" określa wersję systemu Windows:

VWIN   WINDOWS   
 5
 6
 7
 8
NT/2000/XP/2003/Vista/2008/7/2012/8
3.1/3.11
95/98
ME
inna - nieznana wersja lub nie można jej sprawdzić


Wersja 32-bitowa (Win32)
Działa w systemie Windows 95 i nowszym (procesor 386+). Do sprawdzania wersji systemu,
program używa funkcji WinAPI o nazwie GetVersionEx(). Standardowo funkcja ta wypełnia strukturę
OSVERSIONINFO, która zawiera informacje o systemie Windows: numer wersji (major), podwersji
(minor), kompilacji (build), typ platformy (Win3.1, Win32, WinNT) oraz dodatkowe informacje tekstowe
(np. "Dodatek Service Pack 2").
Jeśli program działa w systemie Windows NT 4.0 (SP6) lub nowszym, wypełniana jest rozszerzona
struktura OSVERSIONINFOEX. Oprócz wyżej wymienionych, zawiera ona dodatkowe informacje:
numer wersji (major) i podwersji (minor) dodatku Service Pack oraz typ zainstalowanego systemu
i innego oprogramowania.

Po 173 linii kodu źródłowego, wartość zmiennej "vwin" określa wersję systemu Windows:

                    PREMIERA
VWIN   WINDOWS   ROK    WERSJA
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
3.x
95
98
ME
NT
2000
XP
2003
Vista
2008
7
2012
8
1990
1995
1998
2000
1993
2000
2001
2003
2006
2008
2009
2012
2012
3.0
4.0.950
4.10.1998
4.90.3000 
3.1
5.0.3700
5.1.2600
5.2.3790
6.0.6000
6.0.6001
6.1.7600
6.2.9200
6.2.9200




(NT)
(NT)
(NT)
(NT)
(NT)
(NT)
(NT)
(NT)
(NT)
 0 - nieznana wersja lub nie można jej sprawdzić


Głównym celem było stworzenie algorytmu rozpoznającego wersję systemu i dającego się
zaimplementować w dowolnej aplikacji dla Windows. Algorytm ten umożliwia dostosowanie
działania aplikacji (np. używanych funkcji WinAPI) w zależności od wersji systemu
(wiele funkcji WinAPI nie jest dostępnych w starszych wersjach Windows).

Znane problemy

  ILUSTRACJA  
OPIS
 W systemie Windows NT 4.0 ikony programu (małe i duże) są błędnie wyświetlane.
 Mają czarne tło zamiast przeźroczystego i pojawiają się na nich drobne artefakty
 (zbędne piksele). Problem dotyczy 16- i 32-bitowej wersji programu.
 W systemie Windows Vista okno 16-bitowej wersji programu jest błędnie wyświetlane.
 Ma zmniejszone rozmiary o szerokość 5-pikselowej ramki, którą jest otoczone.
 W systemie Windows Vista/2008/7/2012/8 ikona 16-bitowej wersji programu nie jest
 wyświetlana. Zamiast niej pojawia się systemowa ikona reprezentująca aplikacje (EXE). 


Historia zmian:

1.02 - drobne zmiany w kodzie:
* dodanie przycisku do minimalizacji okna programu
* automatyczne zaznaczanie przycisku "Check" po aktywacji okna programu
* inne mniejsze poprawki

1.01 - drobne zmiany w kodzie:
* zamykanie programu komunikatem WM_DESTROY po kliknięciu przycisku "Quit"
* zamiana bloków poleceń warunkowych IF na SWITCH (mniejszy rozmiar)
* dodanie nawigacji za pomocą klawiatury w oknie programu
* zmiana formatu wyświetlania wersji systemu Windows

1.0 - pierwsza wersja programu.