Hi Jos,
Please refer to:
1, VFP C++ Compiler for Windows 10
For some reasons, the GetVersion function can't work correctly on windows 8.1 or later,
please refer to:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439%28v=vs.85%29.aspxI have added a MyGetVersion function in vfpcore.dll instead of the GetVersion function in kernel32.dll,
so it can display "VFP C++ Compiler for Windows 8.1" on windows 8.1,
and display "VFP C++ Compiler for Windows 10" on windows 10.
We MUST update vfpcore.dll to the version 20141008.
PROC f_getwindowsver
* f_getwindowsver =
DECLARE integer "GetVersion" IN win32api
IF .F.
PUBLIC getversion(1)
ENDI
PRIVATE m.q_getversion
m.q_getversion=IIF(getversion()>=0,getversion(),getversion()+(((((((1*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)
PRIVATE m.q_getversion_loword
m.q_getversion_loword=MOD(m.q_getversion,(((1*16+0)*16+0)*16+0)*16+0)
PRIVATE m.q_getversion_loword_lobyte
PRIVATE m.q_getversion_loword_hibyte
m.q_getversion_loword_lobyte=MOD(m.q_getversion_loword,(1*16+0)*16+0)
m.q_getversion_loword_hibyte=INT(m.q_getversion_loword/((1*16+0)*16+0))
PRIVATE m.q_iswindowsnt
m.q_iswindowsnt=IIF(m.q_getversion < ((((((8*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0,.T.,.F.)
IF m.q_iswindowsnt.AND.VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.2
PRIVATE m.q_errnum,m.q_erroron
m.q_errnum=0
m.q_erroron=ON("ERROR")
ON ERROR m.q_errnum=perror()
DECLARE integer "MyGetVersion" IN ("vfpcore.dll")
ON ERROR &q_erroron
IF .F.
PUBLIC mygetversion(1)
ENDI
IF m.q_errnum=0
PRIVATE m.q_getversion
m.q_getversion=IIF(mygetversion()>=0,mygetversion(),mygetversion()+(((((((1*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)
PRIVATE m.q_getversion_loword
m.q_getversion_loword=MOD(m.q_getversion,(((1*16+0)*16+0)*16+0)*16+0)
PRIVATE m.q_getversion_loword_lobyte
PRIVATE m.q_getversion_loword_hibyte
m.q_getversion_loword_lobyte=MOD(m.q_getversion_loword,(1*16+0)*16+0)
m.q_getversion_loword_hibyte=INT(m.q_getversion_loword/((1*16+0)*16+0))
*PRIVATE m.q_iswindowsnt
*m.q_iswindowsnt=IIF(m.q_getversion < ((((((8*16+0)*16+0)*16+0)*16+0)*16+0)*16+0)*16+0,.T.,.F.)
ENDI
ENDI
PRIVATE m.q_windowsver
m.q_windowsver="Windows"
IF m.q_iswindowsnt
DO CASE
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=7.0
m.q_windowsver="Windows Version "+LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16))
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.4
m.q_windowsver="Windows 10"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.3
m.q_windowsver="Windows 8.1"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.2
m.q_windowsver="Windows 8"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.1
m.q_windowsver="Windows 7"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=6.0
m.q_windowsver="Windows Vista"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=5.1
m.q_windowsver="Windows XP"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=5.0
m.q_windowsver="Windows 2000"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=4.0
m.q_windowsver="Windows NT 4.0"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=3.51
m.q_windowsver="Windows NT 3.51"
OTHER
m.q_windowsver="Windows NT"
ENDC
ELSE
DO CASE
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=4.90
m.q_windowsver="Windows Me"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=4.10
m.q_windowsver="Windows 98"
CASE VAL(LTRIM(STR(m.q_getversion_loword_lobyte,16))+"."+LTRIM(STR(m.q_getversion_loword_hibyte,16)))>=4.0
m.q_windowsver="Windows 95"
OTHER
m.q_windowsver="Windows 9X"
ENDC
ENDI
RETU m.q_windowsver
* END OF PROC F_GETWINDOWSVER.
Best regards.
Chen
2015.4.14