unit
HSWinFuncs;
interface
uses
Windows;
const
VER_NT_WORKSTATION =
0
;
VER_NT_DOMAIN_CONTROLLER =
1
;
VER_NT_SERVER =
2
;
VER_SUITE_SMALLBUSINESS =
1
;
VER_SUITE_ENTERPRISE =
2
;
VER_SUITE_BACKOFFICE =
4
;
VER_SUITE_COMMUNICATIONS =
8
;
VER_SUITE_TERMINAL =
$10
;
VER_SUITE_SMALLBUSINESS_RESTRICTED =
$20
;
VER_SUITE_EMBEDDEDNT =
$40
;
VER_SUITE_DATACENTER =
$80
;
VER_SUITE_SINGLEUSERTS =
$100
;
VER_SUITE_PERSONAL =
$200
;
VER_SUITE_BLADE =
$400
;
type
TOsVersionInfoExA =
packed
record
old: TOsVersionInfoA;
wServicePackMajor:
Word
;
wServicePackMinor:
Word
;
wSuiteMask:
Word
;
wProductType:
Byte
;
wReserved:
Byte
;
end
;
function
WhatWindowsIsInstalled:
string
; overload;
function
WhatWindowsIsInstalled(
var
Major:
integer
;
var
Minor:
integer
):
string
; overload;
implementation
function
WhatWindowsIsInstalled:
string
;
var
VerInfo: TOsVersionInfoExA;
begin
FillChar(VerInfo, sizeof(VerInfo),
0
);
VerInfo
.
old
.
dwOSVersionInfoSize := Sizeof(TOsVersionInfoExA);
if
not
GetVersionExA(VerInfo
.
old)
then
begin
VerInfo
.
old
.
dwOSVersionInfoSize := Sizeof(TOsVersionInfoA);
GetVersionExA(VerInfo
.
old);
end
;
case
VerInfo
.
old
.
dwPlatformId
of
VER_PLATFORM_WIN32_WINDOWS:
if
(Verinfo
.
old
.
dwMajorVersion =
4
)
and
(Verinfo
.
old
.
dwBuildNumber =
950
)
then
Result :=
'Windows 95'
else
if
(Verinfo
.
old
.
dwMajorVersion =
4
)
and
(Verinfo
.
old
.
dwMinorVersion =
10
)
and
(Verinfo
.
old
.
dwBuildNumber =
1998
)
then
Result :=
'Windows 98'
else
if
(Verinfo
.
old
.
dwMinorVersion =
90
)
then
Result :=
'Windows Me'
;
VER_PLATFORM_WIN32_NT:
case
Verinfo
.
old
.
dwMajorVersion
of
3
: Result :=
'Windows NT 3.51'
;
4
: Result :=
'Windows NT 4.0'
;
5
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows 2000'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows XP'
else
if
Verinfo
.
old
.
dwMinorVersion =
2
then
Result :=
'Windows XP 64bit'
;
6
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows Vista'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows Seven'
;
end
;
VER_PLATFORM_WIN32s:
case
Verinfo
.
old
.
dwMajorVersion
of
5
:
if
Verinfo
.
old
.
dwMinorVersion =
2
then
Result :=
'Windows Server 2003'
;
6
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows Server 2008'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows Server 2008 R2'
;
end
;
end
;
end
;
function
WhatWindowsIsInstalled(
var
Major:
integer
;
var
Minor:
integer
):
string
; overload;
var
VerInfo: TOsVersionInfoExA;
begin
FillChar(VerInfo, sizeof(VerInfo),
0
);
VerInfo
.
old
.
dwOSVersionInfoSize := Sizeof(TOsVersionInfoExA);
if
not
GetVersionExA(VerInfo
.
old)
then
begin
VerInfo
.
old
.
dwOSVersionInfoSize := Sizeof(TOsVersionInfoA);
GetVersionExA(VerInfo
.
old);
end
;
case
VerInfo
.
old
.
dwPlatformId
of
VER_PLATFORM_WIN32_WINDOWS:
if
(Verinfo
.
old
.
dwMajorVersion =
4
)
and
(Verinfo
.
old
.
dwBuildNumber =
950
)
then
Result :=
'Windows 95'
else
if
(Verinfo
.
old
.
dwMajorVersion =
4
)
and
(Verinfo
.
old
.
dwMinorVersion =
10
)
and
(Verinfo
.
old
.
dwBuildNumber =
1998
)
then
Result :=
'Windows 98'
else
if
(Verinfo
.
old
.
dwMinorVersion =
90
)
then
Result :=
'Windows Me'
;
VER_PLATFORM_WIN32_NT:
case
Verinfo
.
old
.
dwMajorVersion
of
3
: Result :=
'Windows NT 3.51'
;
4
: Result :=
'Windows NT 4.0'
;
5
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows 2000'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows XP'
else
if
Verinfo
.
old
.
dwMinorVersion =
2
then
Result :=
'Windows XP 64bit'
;
6
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows Vista'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows Seven'
;
end
;
VER_PLATFORM_WIN32s:
case
Verinfo
.
old
.
dwMajorVersion
of
5
:
if
Verinfo
.
old
.
dwMinorVersion =
2
then
Result :=
'Windows Server 2003'
;
6
:
if
Verinfo
.
old
.
dwMinorVersion =
0
then
Result :=
'Windows Server 2008'
else
if
Verinfo
.
old
.
dwMinorVersion =
1
then
Result :=
'Windows Server 2008 R2'
;
end
;
end
;
Major:=Verinfo
.
old
.
dwMajorVersion;
Minor:=Verinfo
.
old
.
dwMinorVersion;
end
;
end
.