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