From: Philippe Mermod on
Hi Everyone,

I'm using Windows 7 Professional (Version 6.1, Build 7600)

The OS(TRUE) function returns : Windows Server 2008 R2 (Version
6.1, Build 7600)

Did someone could resolve this ?

--
Phil Mermod
Crystal Reports Library for Visual Objects
http://www.pkl.ch/dev/
From: Karl Wochele on
Hi Philippe,

as OS() is older than Win7 it won't be able to recognize it. The
following class (found somtime in this forum) might help you. Of course
you will have to expand it when new Windows-versions will appear...

STRUCT _WinOSVersionInfoEx
MEMBER dwOSVersionInfoSize AS DWORD
MEMBER dwMajorVersion AS DWORD
MEMBER dwMinorVersion AS DWORD
MEMBER dwBuildNumber AS DWORD
MEMBER dwPlatformId AS DWORD
MEMBER DIM szCSDVersion[128] AS BYTE

// add EX members
MEMBER wServicePackMajor AS WORD
MEMBER wServicePackMinor AS WORD
MEMBER wSuiteMask AS WORD
MEMBER wProductType AS BYTE
MEMBER wReserved AS BYTE

CLASS OsVersion
EXPORT OsName AS STRING
EXPORT MajorVersion AS DWORD
EXPORT MinorVersion AS DWORD
EXPORT BuildNumber AS DWORD
EXPORT PlatformId AS DWORD // Plattform ID (defines see
VER_PLATFORM_WIN32)
EXPORT DIM CSDVersion[128] AS BYTE

EXPORT ServicePackMajor AS WORD
EXPORT ServicePackMinor AS WORD
EXPORT SuiteMask AS WORD
EXPORT ProductType AS BYTE

METHOD Init() CLASS OsVersion

SELF:OsName := ""

SELF:MajorVersion := 0
SELF:MinorVersion := 0
SELF:BuildNumber := 0
SELF:PlatformId := 0

SELF:ServicePackMajor := 0
SELF:ServicePackMinor := 0
SELF:SuiteMask := 0
SELF:ProductType := 0

SELF:Refresh()

RETURN SELF

METHOD Refresh() CLASS OsVersion
LOCAL strWinOsVersionInfo IS _WinOSVersionInfoEx
LOCAL sMessage AS STRING

strWinOsVersionInfo.dwOSVersionInfoSize := _SIZEOF( _WINOSVERSIONINFOEX )

IF GetVersionEx( @strWinOsVersionInfo )
// Get the Version Info's from the OS
SELF:MajorVersion := strWinOsVersionInfo.dwMajorVersion
SELF:MinorVersion := strWinOsVersionInfo.dwMinorVersion
SELF:BuildNumber := strWinOsVersionInfo.dwBuildNumber
SELF:PlatformId := strWinOsVersionInfo.dwPlatformId
SELF:CSDVersion := strWinOsVersionInfo.szCSDVersion

SELF:ServicePackMajor := strWinOsVersionInfo.wServicePackMajor
SELF:ServicePackMinor := strWinOsVersionInfo.wServicePackMinor
SELF:SuiteMask := strWinOsVersionInfo.wSuiteMask
SELF:ProductType := strWinOsVersionInfo.wProductType

IF SELF:PlatformId == VER_PLATFORM_WIN32S
sMessage := "Win32S Version on Windows 3.1 "

ELSEIF SELF:PlatformId == VER_PLATFORM_WIN32_WINDOWS

IF SELF:MinorVersion == 0
sMessage := "Windows 95"

ELSEIF SELF:MinorVersion == 10
IF SELF:CSDVersion == 65
sMessage := "Windows 98 Second Edition"
ELSE
sMessage := "Windows 98"
ENDIF

ELSEIF SELF:MinorVersion == 90
sMessage := "Windows ME"

ENDIF

ELSEIF SELF:PlatformId == VER_PLATFORM_WIN32_NT

IF SELF:MajorVersion == 3
sMessage := "Windows NT 3.51"

ELSEIF SELF:MajorVersion == 4
sMessage := "Windows NT4"

ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 0
sMessage := "Windows 2000"

ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 1
sMessage := "Windows XP"

ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 2
sMessage := "Windows Server 2003"

ELSEIF SELF:MajorVersion == 6 .AND. SELF:MinorVersion == 0

IF SELF:ProductType == VER_NT_WORKSTATION
sMessage := "Windows Vista"
ELSE
sMessage := "Windows Server 2008"
ENDIF

ELSEIF SELF:MajorVersion == 6 .AND. SELF:MinorVersion == 1

IF SELF:ProductType == VER_NT_WORKSTATION
sMessage := "Windows 7"
ELSE
sMessage := "Windows Server 2008 R2"
ENDIF

ENDIF


IF SELF:ProductType == VER_NT_WORKSTATION

IF _AND( SELF:SuiteMask, VER_SUITE_PERSONAL ) == VER_SUITE_PERSONAL
sMessage += " Home Edition"
ELSE
sMessage += " Professional"
ENDIF

ELSEIF SELF:ProductType == VER_NT_SERVER
// bit flags
IF _AND( SELF:SuiteMask, VER_SUITE_DATACENTER ) == VER_SUITE_DATACENTER
sMessage += " DataCenter Server"

ELSEIF _AND( SELF:SuiteMask, VER_SUITE_ENTERPRISE ) ==
VER_SUITE_ENTERPRISE
sMessage += " Advanced Server"

ELSEIF SELF:MinorVersion == 2 .AND. _AND( SELF:SuiteMask,
VER_SUITE_BLADE ) == VER_SUITE_BLADE
sMessage += " Web Server"

ELSE
sMessage += " Standard Server"

ENDIF
ENDIF
ENDIF

// "Windows 2000 Version 5.0"
sMessage += " Version: " + NTrim(SELF:MajorVersion) + "." +
NTrim(SELF:MinorVersion)

sMessage += " SP: " + NTrim(SELF:ServicePackMajor) + "." +
NTrim(SELF:ServicePackMinor)

sMessage += " Build: " + NTrim(SELF:BuildNumber)


// terminal services
IF GetSystemMetrics( SM_REMOTECONTROL ) != 0
sMessage += " (Terminal Services)"
ENDIF

// terminal services
IF GetSystemMetrics( SM_REMOTESESSION ) != 0
sMessage += " (Remote Session)"
ENDIF

SELF:OsName := sMessage

ELSE
SELF:MajorVersion := 0
SELF:MinorVersion := 0
SELF:BuildNumber := 0
SELF:PlatformId := 0
SELF:OsName := "Windows-Version nicht zu ermitteln"
ENDIF

RETURN NIL

DEFINE SM_REMOTECONTROL := 0x00002001
DEFINE SM_REMOTESESSION := 0x00001000

DEFINE VER_NT_DOMAIN_CONTROLLER := 2
DEFINE VER_NT_SERVER := 3

DEFINE VER_NT_WORKSTATION := 1
DEFINE VER_SUITE_BLADE := 0x00000400

DEFINE VER_SUITE_DATACENTER := 0x00000080
DEFINE VER_SUITE_ENTERPRISE := 0x00000002
DEFINE VER_SUITE_PERSONAL := 0x00000200
DEFINE VER_SUITE_SMALLBUSINESS := 0x00000001
DEFINE VER_SUITE_TERMINAL := 0x00000010


HTH
Karl


Am 28.05.2010 09:59, schrieb Philippe Mermod:
> Hi Everyone,
>
> I'm using Windows 7 Professional (Version 6.1, Build 7600)
>
> The OS(TRUE) function returns : Windows Server 2008 R2 (Version
> 6.1, Build 7600)
>
> Did someone could resolve this ?
>
From: Philippe Mermod on
Hi Karl,

I have VO 2.8 SP3 (2837) : in the whatsnew of SP3, Windows 7 is
already mentioned and under OS() function, it's written :
- The OS() function has been updated to return more recent OS
versions when called with a parameter.

It seems that Windows 7 was not yet considered or not coded
correctly regarding the MS doc :
OSVERSIONINFO :
http://msdn.microsoft.com/en-us/library/ms724834(v=VS.85).aspx
GetVersionEx :
http://msdn.microsoft.com/en-us/library/ms724451(v=VS.85).aspx

--
Phil Mermod
Crystal Reports Library for Visual Objects
http://www.pkl.ch/dev/


Karl Wochele wrote:

> Hi Philippe,
>
> as OS() is older than Win7 it won't be able to recognize it.
> The following class (found somtime in this forum) might help
> you. Of course you will have to expand it when new
> Windows-versions will appear...
>
> STRUCT _WinOSVersionInfoEx
> MEMBER dwOSVersionInfoSize AS DWORD
> MEMBER dwMajorVersion AS DWORD
> MEMBER dwMinorVersion AS DWORD
> MEMBER dwBuildNumber AS DWORD
> MEMBER dwPlatformId AS DWORD
> MEMBER DIM szCSDVersion[128] AS BYTE
>
> // add EX members
> MEMBER wServicePackMajor AS WORD
> MEMBER wServicePackMinor AS WORD
> MEMBER wSuiteMask AS WORD
> MEMBER wProductType AS BYTE
> MEMBER wReserved AS BYTE
>
> CLASS OsVersion
> EXPORT OsName AS STRING
> EXPORT MajorVersion AS DWORD
> EXPORT MinorVersion AS DWORD
> EXPORT BuildNumber AS DWORD
> EXPORT PlatformId AS DWORD // Plattform ID (defines see
> VER_PLATFORM_WIN32) EXPORT DIM CSDVersion[128] AS BYTE
>
> EXPORT ServicePackMajor AS WORD
> EXPORT ServicePackMinor AS WORD
> EXPORT SuiteMask AS WORD
> EXPORT ProductType AS BYTE
>
> METHOD Init() CLASS OsVersion
>
> SELF:OsName := ""
>
> SELF:MajorVersion := 0
> SELF:MinorVersion := 0
> SELF:BuildNumber := 0
> SELF:PlatformId := 0
>
> SELF:ServicePackMajor := 0
> SELF:ServicePackMinor := 0
> SELF:SuiteMask := 0
> SELF:ProductType := 0
>
> SELF:Refresh()
>
> RETURN SELF
>
> METHOD Refresh() CLASS OsVersion
> LOCAL strWinOsVersionInfo IS _WinOSVersionInfoEx
> LOCAL sMessage AS STRING
>
> strWinOsVersionInfo.dwOSVersionInfoSize := _SIZEOF(
> _WINOSVERSIONINFOEX )
>
> IF GetVersionEx( @strWinOsVersionInfo )
> // Get the Version Info's from the OS
> SELF:MajorVersion := strWinOsVersionInfo.dwMajorVersion
> SELF:MinorVersion := strWinOsVersionInfo.dwMinorVersion
> SELF:BuildNumber := strWinOsVersionInfo.dwBuildNumber
> SELF:PlatformId := strWinOsVersionInfo.dwPlatformId
> SELF:CSDVersion := strWinOsVersionInfo.szCSDVersion
>
> SELF:ServicePackMajor := strWinOsVersionInfo.wServicePackMajor
> SELF:ServicePackMinor := strWinOsVersionInfo.wServicePackMinor
> SELF:SuiteMask := strWinOsVersionInfo.wSuiteMask
> SELF:ProductType := strWinOsVersionInfo.wProductType
>
> IF SELF:PlatformId == VER_PLATFORM_WIN32S
> sMessage := "Win32S Version on Windows 3.1 "
>
> ELSEIF SELF:PlatformId == VER_PLATFORM_WIN32_WINDOWS
>
> IF SELF:MinorVersion == 0
> sMessage := "Windows 95"
>
> ELSEIF SELF:MinorVersion == 10
> IF SELF:CSDVersion == 65
> sMessage := "Windows 98 Second Edition"
> ELSE
> sMessage := "Windows 98"
> ENDIF
>
> ELSEIF SELF:MinorVersion == 90
> sMessage := "Windows ME"
>
> ENDIF
>
> ELSEIF SELF:PlatformId == VER_PLATFORM_WIN32_NT
>
> IF SELF:MajorVersion == 3
> sMessage := "Windows NT 3.51"
>
> ELSEIF SELF:MajorVersion == 4
> sMessage := "Windows NT4"
>
> ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 0
> sMessage := "Windows 2000"
>
> ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 1
> sMessage := "Windows XP"
>
> ELSEIF SELF:MajorVersion == 5 .AND. SELF:MinorVersion == 2
> sMessage := "Windows Server 2003"
>
> ELSEIF SELF:MajorVersion == 6 .AND. SELF:MinorVersion == 0
>
> IF SELF:ProductType == VER_NT_WORKSTATION
> sMessage := "Windows Vista"
> ELSE
> sMessage := "Windows Server 2008"
> ENDIF
>
> ELSEIF SELF:MajorVersion == 6 .AND. SELF:MinorVersion == 1
>
> IF SELF:ProductType == VER_NT_WORKSTATION
> sMessage := "Windows 7"
> ELSE
> sMessage := "Windows Server 2008 R2"
> ENDIF
>
> ENDIF
>
>
> IF SELF:ProductType == VER_NT_WORKSTATION
>
> IF _AND( SELF:SuiteMask, VER_SUITE_PERSONAL ) ==
> VER_SUITE_PERSONAL sMessage += " Home Edition"
> ELSE
> sMessage += " Professional"
> ENDIF
>
> ELSEIF SELF:ProductType == VER_NT_SERVER
> // bit flags
> IF _AND( SELF:SuiteMask, VER_SUITE_DATACENTER ) ==
> VER_SUITE_DATACENTER sMessage += " DataCenter Server"
>
> ELSEIF _AND( SELF:SuiteMask, VER_SUITE_ENTERPRISE ) ==
> VER_SUITE_ENTERPRISE sMessage += " Advanced Server"
>
> ELSEIF SELF:MinorVersion == 2 .AND. _AND( SELF:SuiteMask,
> VER_SUITE_BLADE ) == VER_SUITE_BLADE sMessage += " Web
> Server"
>
> ELSE
> sMessage += " Standard Server"
>
> ENDIF
> ENDIF
> ENDIF
>
> // "Windows 2000 Version 5.0"
> sMessage += " Version: " + NTrim(SELF:MajorVersion) + "." +
> NTrim(SELF:MinorVersion)
>
> sMessage += " SP: " + NTrim(SELF:ServicePackMajor) + "." +
> NTrim(SELF:ServicePackMinor)
>
> sMessage += " Build: " + NTrim(SELF:BuildNumber)
>
>
> // terminal services
> IF GetSystemMetrics( SM_REMOTECONTROL ) != 0
> sMessage += " (Terminal Services)"
> ENDIF
>
> // terminal services
> IF GetSystemMetrics( SM_REMOTESESSION ) != 0
> sMessage += " (Remote Session)"
> ENDIF
>
> SELF:OsName := sMessage
>
> ELSE
> SELF:MajorVersion := 0
> SELF:MinorVersion := 0
> SELF:BuildNumber := 0
> SELF:PlatformId := 0
> SELF:OsName := "Windows-Version nicht zu ermitteln"
> ENDIF
>
> RETURN NIL
>
> DEFINE SM_REMOTECONTROL := 0x00002001
> DEFINE SM_REMOTESESSION := 0x00001000
>
> DEFINE VER_NT_DOMAIN_CONTROLLER := 2
> DEFINE VER_NT_SERVER := 3
>
> DEFINE VER_NT_WORKSTATION := 1
> DEFINE VER_SUITE_BLADE := 0x00000400
>
> DEFINE VER_SUITE_DATACENTER := 0x00000080
> DEFINE VER_SUITE_ENTERPRISE := 0x00000002
> DEFINE VER_SUITE_PERSONAL := 0x00000200
> DEFINE VER_SUITE_SMALLBUSINESS := 0x00000001
> DEFINE VER_SUITE_TERMINAL := 0x00000010
>
>
> HTH
> Karl
>
>
> Am 28.05.2010 09:59, schrieb Philippe Mermod:
> > Hi Everyone,
> >
> > I'm using Windows 7 Professional (Version 6.1, Build 7600)
> >
> > The OS(TRUE) function returns : Windows Server 2008 R2
> > (Version 6.1, Build 7600)
> >
> > Did someone could resolve this ?
> >