Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Identify Windows 10
Message
De
13/04/2015 21:38:49
 
 
À
13/04/2015 11:06:03
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01618305
Message ID:
01618342
Vues:
68
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.aspx

I 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
Welcome to VFP C++ Compiler: http://www.baiyujia.com/vfpcompiler
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform