Página 1 de 4

Detectar a versão do Windows

Enviado: 27 Mai 2015 13:48
por clodoaldomonteiro
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?

Detectar a versão do Windows

Enviado: 27 Mai 2015 14:44
por Kapiaba
Porque não atualiza o seu xHarbour?

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

abs

Detectar a versão do Windows

Enviado: 27 Mai 2015 15:01
por Kapiaba
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

Detectar a versão do Windows

Enviado: 27 Mai 2015 15:07
por Kapiaba

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()
http://www.elektrosoft.it/tutorials/Har ... -hbmk2.htm

Detectar a versão do Windows

Enviado: 27 Mai 2015 15:32
por Kapiaba
Funcionou normal com:
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

Detectar a versão do Windows

Enviado: 27 Mai 2015 22:37
por clodoaldomonteiro
Kapiaba,
Tem a gtwvw para essa versão do xHarbour?

Detectar a versão do Windows

Enviado: 28 Mai 2015 03:42
por rochinha
Amiguinhos,

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
Exemplo de uso:

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 )
Veja se ajuda.

Detectar a versão do Windows

Enviado: 28 Mai 2015 09:59
por Kapiaba
gtwvw?? Não conheço, eu uso FiveWin. Sorry. abs.

Você se refere a isso?

Imagem

Detectar a versão do Windows

Enviado: 28 Mai 2015 12:31
por JoséQuintas
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.

Detectar a versão do Windows

Enviado: 28 Mai 2015 13:16
por Kapiaba
Por Exemplo, usando comando direto do FiveWin, eu posso informar ao usuário, que é necessário mais memória.

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
abs.

Detectar a versão do Windows

Enviado: 28 Mai 2015 14:23
por JoséQuintas
A curiosidade aumentou.
Parece que nenhuma máquina comum serviria.

Detectar a versão do Windows

Enviado: 28 Mai 2015 14:35
por clodoaldomonteiro
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.

Detectar a versão do Windows

Enviado: 28 Mai 2015 14:42
por Kapiaba
Boa tarde, você pode baixar a minha versão atual aqui:

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

Imagem

Detectar a versão do Windows

Enviado: 28 Mai 2015 15:21
por JoséQuintas
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:

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
Não é elegante, mas pode evitar rotinas extras presas ao ambiente de trabalho.

Detectar a versão do Windows

Enviado: 28 Mai 2015 15:40
por Kapiaba
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.

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
Veja a imagem que me retorna:

Imagem

abs.