Detectar a versão do Windows
Moderador: Moderadores
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Detectar a versão do Windows
Olá amigos,
Tenho minhas aplicações em xHarbour 1.00 e preciso pegar corretamente a versão do Windows, só que as funções ( Os_IsWinxxxx ) desta versão do xHarbour só reconhecem versões do Windows até o server 2000 e como sabemos, existe muitas versão depois dessa.
Existe outras funções para pegar esses dados?
Tenho minhas aplicações em xHarbour 1.00 e preciso pegar corretamente a versão do Windows, só que as funções ( Os_IsWinxxxx ) desta versão do xHarbour só reconhecem versões do Windows até o server 2000 e como sabemos, existe muitas versão depois dessa.
Existe outras funções para pegar esses dados?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
na pasta \tests do xHarbour só tem isso.
Código: Selecionar todos
PROCEDURE MAIN()
LOCAL nResult:= 0, a, x
CLS
? 'Checking Windows Version & Platform Details'
? '-------------------------------------------'
?
?? 'Platform is: '
IF OS_ISWINNT()
?? "VER_PLATFORM_WIN32_NT. i.e. NT, 2000, XP or 2003 Server"
ELSEIF OS_ISWIN9X()
?? "VER_PLATFORM_WIN32_WINDOWS. i.e. 95, 98 or ME"
ELSE
?? "UNKNOWN?????????"
ENDIF
?
? 'Release Version of Windows is: '
DO CASE
CASE OS_ISWIN95()
?? "95"
CASE OS_ISWIN98()
?? "98"
CASE OS_ISWINME()
?? "ME"
CASE OS_ISWINNT351()
?? "NT3.51"
CASE OS_ISWINNT4()
?? "NT4.00"
CASE OS_ISWIN2000()
?? "2000"
CASE OS_ISWINXP()
?? "XP"
CASE OS_ISWIN2003()
?? "2003 Server"
OTHERWISE
?? "UNKNOWN"
ENDCASE
?
? 'Details of version'
a:= os_versioninfo()
IF !EMPTY( a )
? " MajorVersion: ", a[ 1 ]
? " MinorVersion: ", a[ 2 ]
? " BuildNumber: ", a[ 3 ]
? " PlatformId: ", a[ 4 ]
? " ExtraData: ", a[ 5 ]
ENDIF
?
IF OS_ISWTSCLIENT()
? "Running as a Windows Terminal Server Client"
ELSE
? "NO Windows Terminal Server Client detected"
ENDIF
?
? 'Checking and setting network for Windows'
? '----------------------------------------'
?
IF OS_ISWTSCLIENT() .AND. !OS_NETREGOK() // Note: If Windows Terminal Server client DONOT
// attempt to set registry.
? 'Registry on WTS server is not set correctly for networking.'
? 'Please check with System Administrator to set the registry correctly.'
ELSEIF OS_NETREGOK( .T. )
? 'Registry set OK for networking'
ELSE
? 'Failed to set registry - May need "Administrator" rights'
ENDIF
?
IF !OS_NETVREDIROK( @nResult )
? 'Invalid RVREDIR.VXD file installed'
IF nResult = 950
? 'You need file VREDRUPD.EXE if your vredir.vxd is dated "09:50:00"'
ELSEIF nResult == 1111
? 'You need file VRDRUPD.EXE if your vredir.vxd is dated "11:11:10"'
ENDIF
ENDIF
WAIT
RETURN
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
Código: Selecionar todos
os_IsWin2000()
os_IsWin2000_Or_Later()
os_IsWin2003()
os_IsWin7()
os_IsWin8()
os_IsWin95()
os_IsWin98()
os_IsWin9x()
os_IsWinME()
os_IsWinNT()
os_IsWinNT351()
os_IsWinNT4()
os_IsWinVista()
os_IsWinVista_Or_Later()
os_IsWinXP()
os_IsWinXP_Or_Later()
os_IsWTSClient()
os_NetRegOk()
os_NetVRedirOk()
os_VersionInfo()
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
Funcionou normal com:
xHarbour 1.2.3 Intl. (SimpLex) (Build 20150419)
Copyright 1999-2015, http://www.xharbour.org http://www.harbour-project.org/
xHarbour 1.2.3 Intl. (SimpLex) (Build 20150419)
Copyright 1999-2015, http://www.xharbour.org http://www.harbour-project.org/
Código: Selecionar todos
#Include "FiveWin.ch" // comente
PROCEDURE MAIN()
LOCAL nResult:= 0, a, x
//CLS
? 'Checking Windows Version & Platform Details'
?'Platform is: '
IF OS_ISWINNT()
?"VER_PLATFORM_WIN32_NT. i.e. NT, 2000, XP or 2003 Server"
ELSEIF OS_ISWIN9X()
?"VER_PLATFORM_WIN32_WINDOWS. i.e. 95, 98 or ME"
ELSE
?"UNKNOWN?????????"
ENDIF
? 'Release Version of Windows is: '
DO CASE
CASE OS_ISWIN95()
?"95"
CASE OS_ISWIN98()
?"98"
CASE OS_ISWINME()
?"ME"
CASE OS_ISWINNT351()
?"NT3.51"
CASE OS_ISWINNT4()
?"NT4.00"
CASE OS_ISWIN2000()
?"2000"
CASE OS_ISWINXP()
?"XP"
CASE OS_ISWIN2003()
?"2003 Server"
CASE os_IsWinVista()
? "Windows Vista"
CASE os_IsWin7()
? "Windows 7"
CASE os_IsWin8()
? "Windows 8"
OTHERWISE
?"UNKNOWN"
ENDCASE
? 'Details of version'
a:= os_versioninfo()
IF !EMPTY( a )
? " MajorVersion: ", a[ 1 ]
? " MinorVersion: ", a[ 2 ]
? " BuildNumber: ", a[ 3 ]
? " PlatformId: ", a[ 4 ]
? " ExtraData: ", a[ 5 ]
ENDIF
IF OS_ISWTSCLIENT()
? "Running as a Windows Terminal Server Client"
ELSE
? "NO Windows Terminal Server Client detected"
ENDIF
? 'Checking and setting network for Windows'
IF OS_ISWTSCLIENT() .AND. !OS_NETREGOK() // Note: If Windows Terminal Server client DONOT
// attempt to set registry.
? 'Registry on WTS server is not set correctly for networking.'
? 'Please check with System Administrator to set the registry correctly.'
ELSEIF OS_NETREGOK( .T. )
? 'Registry set OK for networking'
ELSE
? 'Failed to set registry - May need "Administrator" rights'
ENDIF
IF !OS_NETVREDIROK( @nResult )
? 'Invalid RVREDIR.VXD file installed'
IF nResult = 950
? 'You need file VREDRUPD.EXE if your vredir.vxd is dated "09:50:00"'
ELSEIF nResult == 1111
? 'You need file VRDRUPD.EXE if your vredir.vxd is dated "11:11:10"'
ENDIF
ENDIF
RETURN
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Detectar a versão do Windows
Kapiaba,
Tem a gtwvw para essa versão do xHarbour?
Tem a gtwvw para essa versão do xHarbour?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Detectar a versão do Windows
Amiguinhos,
Fiz algumas alterações na classe tSystem.prg de forma a me retornar as versões de Windows mais conhecidas(por mim).
Exemplo de uso:
Veja se ajuda.
Fiz algumas alterações na classe tSystem.prg de forma a me retornar as versões de Windows mais conhecidas(por mim).
Código: Selecionar todos
#include "FiveWin.ch"
//------------------------------------------------------------------------
#include "struct.ch"
#include "DLL.CH"
#define HKEY_CURRENT_USER 2147483649 // 0x80000001
#define HKEY_LOCAL_MACHINE 2147483650 // 0x80000002
#DEFINE MEM_TotalPhys 1
#DEFINE MEM_AvailPhys 2
#DEFINE MEM_TotalPageFile 3
#DEFINE MEM_AvailPageFile 4
#DEFINE MEM_TotalVirtual 5
#DEFINE MEM_AvailVirtual 6
CLASS TSystemInfo
DATA nOsVer, nMajor, nMinor, nBuild, nPlatform, cSP
DATA wSerPackM, wSerPacki, wSteMask, wProdType, wRes
DATA TSIVersion
METHOD New( lTest )
METHOD WinVer()
METHOD VerNum() INLINE LTrim( Str( ::nMajor ) ) + "." +;
LTrim( Str( ::nMinor ) ) + "." +;
LTrim( Str( ::nBuild ) ) +;
RTrim( " " + ::cSP ) // added by LKM
METHOD WhichNT()
METHOD TimeZone()
METHOD DateSystemBios()
METHOD NameSystemBios()
METHOD DateVideoBios()
METHOD NameVideoBios()
METHOD ComputerName()
METHOD IEStartPage()
METHOD IEVersion()
METHOD DTWallpaper()
METHOD DirectxVersion()
METHOD Ass4Ext(cExt) // Associated programme for this extention
METHOD BootDir()
METHOD GetColors()
METHOD SpeedCPU(nCPU)
METHOD CPU() INLINE GetCPU()
METHOD IsDualCPU() INLINE ::SpeedCPU(2)>0
METHOD CPUVendor(nCPU)
METHOD CPUIdentifier(nCPU)
METHOD IsWin95() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=0 .AND. ::nBuild=950
METHOD IsWin95SP1() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=0 .AND. ::nBuild<=1080
METHOD IsWin95OSR2() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor<10 .AND. ::nBuild>1080
METHOD IsWin98() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=10 .AND. ::nBuild=1998
METHOD IsWin98SP1() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=10 .AND. ::nBuild>1998 .AND. ::nBuild<2183
METHOD IsWin98SE() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=10 .AND. ::nBuild>2183
METHOD IsWinME() INLINE ::nPlatform<2 .AND. ::nMajor=4 .AND. ::nMinor=90 .AND. ::nBuild>2183
METHOD IsWinNT31() INLINE ::nPlatform=2 .AND. ::nMajor=3 .AND. ::nMinor=10
METHOD IsWinNT35() INLINE ::nPlatform=2 .AND. ::nMajor=3 .AND. ::nMinor=50
METHOD IsWinNT351() INLINE ::nPlatform=2 .AND. ::nMajor=3 .AND. ::nMinor=51
METHOD IsWinNT4() INLINE ::nPlatform=2 .AND. ::nMajor=4
METHOD IsWin2000() INLINE lWin2000
METHOD IsWinXP() INLINE ::nPlatform=2 .AND. ::nMajor=5 .AND. ::nMinor=1
METHOD IsWin2003() INLINE ::nPlatform=2 .AND. ::nMajor=5 .AND. ::nMinor=2
METHOD IsWinVista() INLINE ::nPlatform=2 .AND. ::nMajor=6 .AND. ::nMinor=0 .AND. ::nBuild=6000
METHOD IsWinSeven() INLINE ::nPlatform=2 .AND. ::nMajor=6 .AND. ::nMinor=1 .AND. ::nBuild=7601
METHOD IsWin2K8Server() INLINE ::nPlatform=2 .AND. ::nMajor=6 .AND. ::nMinor=1 .AND. ::nBuild=7600
METHOD IsWinEight() INLINE ::nPlatform=2 .AND. ::nMajor=6 .AND. ::nMinor=2 // .AND. ::nBuild=9200
METHOD ServicePack() INLINE If(lWin2000,"Service pack "+Ltrim(Str(::wSerPackM)),"")
METHOD IsNTPreWin2K() INLINE ::nPlatform=2 .AND. ::nMajor<=4
METHOD IsNTWorkstation() INLINE ::IsNTPreWin2K() .AND. Upper(::WhichNT())="WINNT"
METHOD IsNTServer() INLINE ::IsNTPreWin2K() .AND. Upper(::WhichNT())="SERVERNT"
METHOD IsWin2000Prof() INLINE lWin2000 .AND. Upper(::WhichNT())="WINNT"
METHOD IsWin2000Server() INLINE lWin2000 .AND. ( Upper(::WhichNT())="SERVERNT" .OR. Upper(::WhichNT())="LANMANNT")
//METHOD IsWin2003Prof() INLINE lWin2000 .AND. Upper(::WhichNT())="WINNT"
//METHOD IsWin2003Server() INLINE lWin2000 .AND. ( Upper(::WhichNT())="SERVERNT" .OR. Upper(::WhichNT())="LANMANNT")
METHOD Memory(n)
ENDCLASS
//-----------------------------------
METHOD New( lTest ) CLASS TSystemInfo
LOCAL buffer, sInfo
::TSIVersion:="1.04"
if Valtype( lTest )#"L"
lTest:=.f.
endif
lWin2000:=IsWin2K()
STRUCT sInfo
MEMBER nLOsVer AS DWORD // Size of the structure
MEMBER nLMajor AS DWORD // Major windows Version
MEMBER nLMinor AS DWORD // Minor Windows Version
MEMBER nLBuild AS DWORD // Build Number
MEMBER nLPlatform AS DWORD // Wich Platform
MEMBER cLSP AS STRING LEN 128 // Service Pack (Nt/2000)
if lWin2000
MEMBER wLSerPackM AS WORD
MEMBER wLSerPacki AS WORD
MEMBER wLSteMask AS WORD
MEMBER wLProdType AS BYTE
MEMBER wLRes AS BYTE
endif
ENDSTRUCT
sInfo:Setmember(1,sInfo:Sizeof())
buffer:=sInfo:cBuffer
if GetVerExA(@buffer) <> 1
MsgInfo("Error on Calling GetVersionExA")
return self
endif
sInfo:cBuffer:=buffer
::nOSVer :=nLoWord(sInfo:nLOSVer)
::nMajor :=nLoWord(sInfo:nLMajor)
::nMinor :=nLoWord(sInfo:nLMinor)
::nBuild :=nLoWord(sInfo:nLBuild)
::nPlatform:=nLoWord(sInfo:nLPlatform)
::cSP :=Alltrim(psz(sInfo:cLSP))
if lWin2000
::wSerPackM:=nLoWord(sInfo:wLSerPackM)
::wSerPacki:=nLoWord(sInfo:wLSerPacki)
::wSteMask :=nLoWord(sInfo:wLSteMask)
::wProdType:=sInfo:wLProdType
::wRes :=sInfo:wLRes
endif
if lTest
MsgInfo("nOsVers = " +LTrim(Str(::nOsVer)) +CRLF+;
"nMajor = " +LTrim(Str(::nMajor)) +CRLF+;
"nMinor = " +LTrim(Str(::nMinor)) +CRLF+;
"nBuild = " +LTrim(Str(::nBuild)) +CRLF+;
"sPlatform = " +LTrim(Str(::nPlatform)) +CRLF+;
"cSP = " + AllTrim(::cSP))
if lWin2000
MsgInfo("wSerPackM = " +LTrim(Str(::wSerPackM))+CRLF+;
"wSerPacki = " +LTrim(Str(::wSerPacki))+CRLF+;
"wSteMask = " +LTrim(Str(::wSteMask ))+CRLF+;
"wProdType = " +LTrim(Str(::wProdType))+CRLF+;
"wRes = " +LTrim(Str(::wRes ))+CRLF,"Windows2000 Info")
endif
endif
return Self
//--------------------------------------------------------------------
Function IsWin2K()
LOCAL sInfo, buffer
STRUCT sInfo
MEMBER OsVer AS DWORD // Size of the structure
MEMBER Major AS DWORD // Major windows Version
MEMBER Minor AS DWORD // Minor Windows Version
MEMBER Build AS DWORD // Build Number
MEMBER Platform AS DWORD // Wich Platform
MEMBER SP AS STRING LEN 128 // Service Pack (Nt/2000)
ENDSTRUCT
sInfo:Setmember(1,sInfo:Sizeof())
buffer:=sInfo:cBuffer
if GetVerExA(@buffer) <> 1
MsgInfo("Error on Calling GetVersionExA")
return .f.
endif
sInfo:cBuffer:=buffer
RETURN (sInfo:Platform=2 .AND. sInfo:Major=5 .AND. sInfo:Minor=0)
//--------------------------------------------------------------------
METHOD WinVer( ) CLASS TSystemInfo
LOCAL cVersion:=""
DO CASE
CASE ::IsWin95() ; cVersion:="Windows 95"
CASE ::IsWin95SP1() ; cVersion:="Windows 95 Service pack 1"
CASE ::IsWin95OSR2() ; cVersion:="Windows 95 OSR2"
CASE ::IsWin98() ; cVersion:="Windows 98"
CASE ::IsWin98SP1() ; cVersion:="Windows 98 Service pack 1"
CASE ::IsWin98SE() ; cVersion:="Windows 98 Second Edition"
CASE ::IsWinME() ; cVersion:="Windows ME"
CASE ::IsWinNT31() ; cVersion:="Windows NT 3.1"
CASE ::IsWinNT35() ; cVersion:="Windows NT 3.5"
CASE ::IsWinNT351() ; cVersion:="Windows NT 3.51"
CASE ::IsWinNT4() ; cVersion:="Windows NT 4"
CASE ::IsWin2000() ; cVersion:="Windows 2000 "+If(::IsWin2000Prof,"Professional","Server")+" "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
CASE ::IsWinXP() ; cVersion:="Windows XP build "+LTrim(Str(::nBuild))+" "+::cSP
CASE ::IsWin2003() ; cVersion:="Windows 2003 "+If(::IsWin2000Prof,"Professional","Server")+" "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
CASE ::IsWinVista() ; cVersion:="Windows Vista "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
CASE ::IsWinSeven() ; cVersion:="Windows Seven "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
CASE ::IsWinEight() ; cVersion:="Windows Eight "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
//CASE ::IsWin2003Prof() ; cVersion:="Windows 2003 Professional "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
//CASE ::IsWin2003Server() ; cVersion:="Windows 2003 Server "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
CASE ::IsWin2K8Server() ; cVersion:="Windows 2008 Server "+AllTrim(::cSP)+" build "+LTrim(Str(::nBuild))
OTHER ; cVersion:="Unknown Windows version"
ENDCASE
RETURN cVersion
//--------------------------------------------------------------------
METHOD WhichNT() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"System\CurrentControlSet\Control\ProductOptions",.f.)
uVar := oReg:Get("ProductType","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD DateSystemBios() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System",.f.)
uVar := oReg:Get("SystemBiosdate","")
oReg:Close()
if Empty(uVar)
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"Enum\Root\*PNP0C01\0000",.f.)
uVar := oReg:Get("Biosdate","")
oReg:Close()
endif
RETURN uVar
//--------------------------------------------------------------------
METHOD NameSystemBios() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System",.f.)
uVar := RTrim( Remove0( oReg:Get("SystemBiosVersion","") ) )
oReg:Close()
if Empty(uVar)
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"Enum\Root\*PNP0C01\0000",.f.)
uVar := Remove0( oReg:Get("BiosName","")+" "+oReg:Get("BiosVersion","") )
oReg:Close()
endif
RETURN uVar
//--------------------------------------------------------------------
METHOD DateVideoBios() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System",.f.)
uVar := oReg:Get("VideoBiosdate","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD NameVideoBios() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System",.f.)
uVar := RTrim( Remove0( oReg:Get("VideoBiosVersion","") ) )
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD Computername() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName",.f.)
uVar := oReg:Get("Computername","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD TimeZOne() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\TimeZoneInformation",.f.)
uVar := oReg:Get("StandardName","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD IEStartPage() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_CURRENT_USER,"Software\Microsoft\Internet Explorer\Main",.f.)
uVar := oReg:Get("Start Page","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD IEVersion() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Internet Explorer",.f.)
uVar := oReg:Get("Version","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD DTWallpaper() CLASS TSystemInfo //DesktopWallpaper
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_CURRENT_USER,"Software\Microsoft\Internet Explorer\Desktop\General",.f.)
uVar := oReg:Get("Wallpaper","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD SpeedCPU(nCPU) CLASS TSystemInfo
LOCAL oReg, uVar
if ValType(nCPU)#"N"
nCPU:=1
endif
if ::nPlatform<2 //Win95-98-ME
uVar:=0
else
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System\CentralProcessor\"+LTrim(Str(nCPU-1)),.f.)
uVar := oReg:Get("~Mhz",0)
oReg:Close()
uVar:=Round(uVar/10,0)*10
endif
RETURN uVar
//--------------------------------------------------------------------
METHOD CPUVendor(nCPU) CLASS TSystemInfo
LOCAL oReg, uVar
if ValType(nCPU)#"N"
nCPU:=1
endif
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System\CentralProcessor\"+LTrim(Str(nCPU-1)),.f.)
uVar := oReg:Get("VendorIdentifier","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD CPUIdentifier(nCPU) CLASS TSystemInfo
LOCAL oReg, uVar
if ValType(nCPU)#"N"
nCPU:=1
endif
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System\CentralProcessor\"+LTrim(Str(nCPU-1)),.f.)
uVar := oReg:Get("Identifier","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD DirectXVersion() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\DirectX",.f.)
uVar := oReg:Get("Version","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD Ass4Ext(cExt) CLASS TSystemInfo
LOCAL oReg, uVar
if ValType(cExt)#"C"
RETURN ""
endif
if Left(cExt,1)#"."
cExt:="."+cExt
endif
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Extensions",.f.)
uVar := oReg:Get(cExt,"")
oReg:Close()
RETURN SubStr(uVar,1,Len(uVar)-(Len(cExt)+2))
//--------------------------------------------------------------------
METHOD BootDir() CLASS TSystemInfo
LOCAL oReg, uVar
oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup",.f.)
uVar := oReg:Get("BootDir","")
oReg:Close()
RETURN uVar
//--------------------------------------------------------------------
METHOD Memory(n) CLASS TSystemInfo
/* ------ DESABILITEI QUANDO ATUALIZEI O HARBOUR 2007 */
LOCAL nRetu
#ifdef __HARBOUR__
#pragma BEGINDUMP
#include "windows.h"
#pragma ENDDUMP
nRetu := HB_INLINE( n )
{
MEMORYSTATUS mst;
long n = hb_parnl(1);
mst.dwLength = sizeof( MEMORYSTATUS );
GlobalMemoryStatus( &mst );
switch( n )
{
case 1: hb_retnl( mst.dwTotalPhys / (1024*1024) ) ; break;
case 2: hb_retnl( mst.dwAvailPhys / (1024*1024) ) ; break;
case 3: hb_retnl( mst.dwTotalPageFile / (1024*1024) ) ; break;
case 4: hb_retnl( mst.dwAvailPageFile / (1024*1024) ) ; break;
case 5: hb_retnl( mst.dwTotalVirtual / (1024*1024) ) ; break;
case 6: hb_retnl( mst.dwAvailVirtual / (1024*1024) ) ; break;
default: hb_retnl( 0 ) ;
}
}
#else
LOCAL oMemory
STRUCT oMemory
MEMBER m1 AS LONG // nSize
MEMBER m2 AS LONG // Memory Load
MEMBER m3 AS LONG // Total Physical
MEMBER m4 AS LONG // Available Physical
MEMBER m5 AS LONG // Total Page File
MEMBER m6 AS LONG // Available Page File
MEMBER m7 AS LONG // Total Virtual
MEMBER m8 AS LONG // Available Virtual
ENDSTRUCT
oMemory:m1 = oMemory:SizeOf()
MemStat( oMemory:cBuffer )
DO CASE
CASE n=1 ; nRetu:=Round( oMemory:m3 / (1024*1024) ,0 )
CASE n=2 ; nRetu:=Round( oMemory:m4 / (1024*1024) ,0 )
CASE n=3 ; nRetu:=Round( oMemory:m5 / (1024*1024) ,0 )
CASE n=4 ; nRetu:=Round( oMemory:m6 / (1024*1024) ,0 )
CASE n=5 ; nRetu:=Round( oMemory:m7 / (1024*1024) ,0 )
CASE n=6 ; nRetu:=Round( oMemory:m8 / (1024*1024) ,0 )
OTHERWISE; nRetu:=0
ENDCASE
#endif
RETURN nRetu
//--------------------------------------------------------------------
#ifndef __HARBOUR__
DLL32 STATIC FUNCTION MemStat( pMEMORY AS LPSTR ) AS VOID;
PASCAL FROM "GlobalMemoryStatus" LIB "KERNEL32.DLL"
#endif
//--------------------------------------------------------------------
METHOD GetColors() CLASS TSystemInfo
LOCAL hDC, nPlanes, nBitsPixel
hDC := CreateDC("DISPLAY", "", "")
nPlanes := GetDeviceCaps(hDC, 14)
nBitsPixel:= GetDeviceCaps(hDC, 12)
DeleteDC(hDc)
RETURN Int(2^(nPlanes*nBitsPixel))
//--------------------------------------------------------------------
DLL32 FUNCTION GetVerExA( @lpVersionInformation AS LPSTR );
AS LONG PASCAL FROM "GetVersionExA" LIB "KERNEL32.DLL"
STATIC Function psz( c ) ; RETURN substr( c, 1, At( Chr(0), c ) - 1 )
STATIC Function Remove0( c ) ; RETURN StrTran( c, Chr(0), " " )
//#ifdef __HARBOUR__
// #pragma BEGINDUMP
// static void hb_retnl( LONG l )
// {
// hb_itemPutNL( &hb_stack.Return, l );
// }
// #pragma ENDDUMP
//#endif
Código: Selecionar todos
oSystemInfo:=TSystemInfo():New()
? "Informacao do sistema.",;
"------------------------",;
" Versao do Windows = " + oSystemInfo:WinVer(),;
" Numero da versao = " + oSystemInfo:VerNum(),;
" Plataform = " + str( oSystemInfo:nPlatform ),;
" Major = " + str( oSystemInfo:nMajor ),;
" Minor = " + str( oSystemInfo:nMinor ),;
" Build = " + str( oSystemInfo:nBuild )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
gtwvw?? Não conheço, eu uso FiveWin. Sorry. abs.
Você se refere a isso?

Você se refere a isso?

- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Detectar a versão do Windows
Não dá pra usar a tradicional do Clipper?
? OS()
Windows 7 6.1.7601 Service Pack 1
Fiquei curioso em saber porque precisaria saber qual a versão do Windows.
? OS()
Windows 7 6.1.7601 Service Pack 1
Fiquei curioso em saber porque precisaria saber qual a versão do Windows.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
Por Exemplo, usando comando direto do FiveWin, eu posso informar ao usuário, que é necessário mais memória.
abs.
Código: Selecionar todos
cMemoria := Trans( ( nExtMem() / ( 1024 * 1024 * 1014 ) ), "@E 999.99 GB" )
IF IsWin8() // 15 Gb
IF nExtMem() < 15000000000
lFaltaMemoria := .T.
ENDIF
ELSEIF IsWin7() .AND. IsWin64() // 7 de 64 Bits 12 Gb no Min
IF nExtMem() < 11000000000
lFaltaMemoria := .T.
ENDIF
ELSEIF IsWin7() .AND. .NOT. IsWin64() // 7 de 32 Bits 3 Gb
IF nExtMem() < 3000000000
lFaltaMemoria := .T.
ENDIF
ELSEIF IsWinVista() // 3 Gb
IF nExtMem() < 3000000000
lFaltaMemoria := .T.
ENDIF
ELSEIF IsWin2000() // 3 Gb
IF nExtMem() < 3000000000
lFaltaMemoria := .T.
ENDIF
ELSEIF IsWinXP()
IF nExtMem() < 3000000000
lFaltaMemoria := .T.
ENDIF
ENDIF
IF lFaltaMemoria
? "Falta memoria em seu computador... "
ENDIF
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Detectar a versão do Windows
A curiosidade aumentou.
Parece que nenhuma máquina comum serviria.
Parece que nenhuma máquina comum serviria.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Detectar a versão do Windows
Amigos,
Eu programo ainda com os ensinamentos básicos do clipper/xbase e não tenho experiência alguma com classes e nem mesmo com alguma framework para (x)Harbour.
Peguei meus antigos fontes gerados com a RAD Gas-Pro e vim ajustando com forme minha necessidade. É a parte ruim de se usar ferramentas RAD ou framework, mas não me arrependo, pois ela me trouxe muita produção, que se transformaram em ótimas receitas.
Richinha,
Você acha que teria como eu compilar essa classe com o xHarbour 1.00?
Quintas,
Eu uso essas funções, para ajudar no ajuste da resolução das minhas telas e a função OS() retorna que o S.O. é Win XP, mesmo estando em uma versão superior.
Kapiaba,
Você pode enviar-me sua pasta do xHarbour, para que eu possa fazer meus testes?
E o ruim de se fazer uma migração, mesmo de uma versão do xHarbour, é que temos que reajustar várias coisas, logo, não uso framework para aceletar meus processos, e pior ainda, tenho todos os meus fontes ajustados para o RAD do Gas-Pro.
Já até tentei fazer antes e deu muito trabalho que desisti.
Para vocês terem uma ideia, no meu sistema principal, tive que ajustar os nomes de alguns campos, em algumas tabelas, por conta de uma exigência do TCE daqui, e tive um montão de problema.
Agradeço a todos e espero respostas.
Eu programo ainda com os ensinamentos básicos do clipper/xbase e não tenho experiência alguma com classes e nem mesmo com alguma framework para (x)Harbour.
Peguei meus antigos fontes gerados com a RAD Gas-Pro e vim ajustando com forme minha necessidade. É a parte ruim de se usar ferramentas RAD ou framework, mas não me arrependo, pois ela me trouxe muita produção, que se transformaram em ótimas receitas.
Richinha,
Você acha que teria como eu compilar essa classe com o xHarbour 1.00?
Quintas,
Eu uso essas funções, para ajudar no ajuste da resolução das minhas telas e a função OS() retorna que o S.O. é Win XP, mesmo estando em uma versão superior.
Kapiaba,
Você pode enviar-me sua pasta do xHarbour, para que eu possa fazer meus testes?
E o ruim de se fazer uma migração, mesmo de uma versão do xHarbour, é que temos que reajustar várias coisas, logo, não uso framework para aceletar meus processos, e pior ainda, tenho todos os meus fontes ajustados para o RAD do Gas-Pro.
Já até tentei fazer antes e deu muito trabalho que desisti.
Para vocês terem uma ideia, no meu sistema principal, tive que ajustar os nomes de alguns campos, em algumas tabelas, por conta de uma exigência do TCE daqui, e tive um montão de problema.
Agradeço a todos e espero respostas.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
Boa tarde, você pode baixar a minha versão atual aqui:
https://bitbucket.org/fivetech/harbour- ... _bcc58.zip

https://bitbucket.org/fivetech/harbour- ... _bcc58.zip

- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Detectar a versão do Windows
Clodoaldo
Não sei se foi só pra efeito de post, mas a análise checa, por exemplo, 12GB pra Windows 7 64 bits.
Foi a isso que me referi no último post.
(além de considerar que isso só será possível de testar se for EXE 64 bits)
Quanto à checagem de SO, como último recurso, o mesmo que faria em Clipper.
Apenas como exemplo, sem as checagens adicionais:
Não é elegante, mas pode evitar rotinas extras presas ao ambiente de trabalho.
Não sei se foi só pra efeito de post, mas a análise checa, por exemplo, 12GB pra Windows 7 64 bits.
Foi a isso que me referi no último post.
(além de considerar que isso só será possível de testar se for EXE 64 bits)
Quanto à checagem de SO, como último recurso, o mesmo que faria em Clipper.
Apenas como exemplo, sem as checagens adicionais:
Código: Selecionar todos
FUNCTION WhatOs()
STATIC cVersao := ""
IF Empty( cVersao )
RUN ( "VER > teste.txt" )
cVersao := MemoRead( "teste.txt" )
fErase( "teste.txt" )
ENDIF
RETURN cVersao
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Detectar a versão do Windows
José Quintas, neste seu exemplo não me serviria para nada, já que o comando VER, me retorna a versão do programa WINDOWS, e não qual é o windows se xp, 7, 8, etc.
Veja a imagem que me retorna:

abs.
Código: Selecionar todos
#Include "FiveWin.ch"
FUNCTION WhatOs()
STATIC cVersao := ""
IF Empty( cVersao )
MYRUN ( "VER > teste.txt" )
cVersao := MemoRead( "teste.txt" )
? cVersao
fErase( "teste.txt" )
ENDIF
RETURN cVersao
Function MYRUN( cComando )
Local oShell, RET, lOk:=.T.
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
lOk:=.F.
END
END
IF lOk
TRY
//.F. = Nao espera a aplicacao fechar, .T. espera.
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell := NIL
ENDIF
//-- RET := oShell:Run( "%comspec% /c " + cComando, 0) //, .T. )
RETURN lOk

abs.