L'auteur
FoxInCloud (Th. Nivelet) France Membre Simple # 0000000014 enregistré le 13/10/2004http://www.foxincloud.com/ Nivelet Thierry 75016 Paris de la société Abaque Fiche personnelle
Note des membres
pas de note
Contributions > 05 - API et appels systèmes
Informations sur la machine
# 0000000219
ajouté le 07/07/2005 10:08:49 et modifié le 04/06/2007
consulté 10211 fois
Niveau
initié Version(s) Foxpro : VFP 9.0 VFP 8.0 VFP 7.0 VFP 6.0 VFP 5.0 VFP 3.0
Description
Classe exposant les informations sur le système, le processeur et la mémoire de la machine.
Exécuter "abMachineInfo_Test" pour voir les résultats
C'est l'article Q181289 de la Base de Connaissance (KB) VFP déniché par Fred que j'ai adapté, amélioré et francisé.
Programmé en classe pour un accès et une adaptation plus faciles par nos amis foxeurs.
Peut être enrichie avec d'autres fonctions API windows intéressantes si vous en connaissez.
Code source :
* ==================================
DEFINE CLASS abMachineInfo as Relation && Fournit les informations sur la machine : processeur, mémoire, etc.
* Système
nOEMid = 0
nPageSize = 0
nAppAddrMin = 0
nAppAddrMax = 0
nProcessorMask = 0
nProcessors = 0
nProcessorType = 0
cProcessorName = Space (0)
nAllocationGranularity = 0
nReserved = 0
* Mémoire
nMemLoad = 0
nMemPhysTot = 0
nMemPhysAvail = 0
nPageFileTot = 0
nPageFileAvail = 0
nMemVirtualTot = 0
nMemVirtualAvail = 0
* Processeur
nAddressWidth = 0
nArchitecture = 0
nAvailability = 0
nCpuStatus = 0
nCurrentClockSpeed = 0
nDataWidth = 0
cDescription = space (0)
cDeviceID = space (0)
nExtClock = 0
nFamily = 0
nL2CacheSize = 0
nL2CacheSpeed = 0
nLevel = 0
nLoadPercentage = 0
cManufacturer = space (0)
nMaxClockSpeed = 0
cProcessorFullName = space (0)
cPNPDeviceID = space (0)
cProcessorId = space (0)
nProcessorType = 0
nRevision = 0
cRole = space (0)
cSocketDesignation = space (0)
nStatusInfo = 0
cStepping = space (0)
cUniqueId = space (0)
nUpgradeMethod = 0
cVersion = space (0)
nVoltageCaps = 0
* ------------------------------------
PROCEDURE SystemInfo && Peuple les informations système
DECLARE GetSystemInfo IN win32api STRING @lcSystemInfo
LOCAL lcSysInfo
m.lcSysInfo = SPACE (36)
GetSystemInfo(@lcSysInfo)
this .nOEMid = StrToLong(LEFT (m.lcSysInfo, 4))
this .nPageSize = StrToLong(SUBSTR (m.lcSysInfo, 5, 4))
this .nAppAddrMin = StrToLong(SUBSTR (m.lcSysInfo, 9, 4))
this .nAppAddrMax = StrToLong(SUBSTR (m.lcSysInfo, 13, 4))
this .nProcessorMask = StrToLong(SUBSTR (m.lcSysInfo, 17, 4))
this .nProcessors = StrToLong(SUBSTR (m.lcSysInfo, 21, 4))
this .nProcessorType = StrToLong(SUBSTR (m.lcSysInfo, 25, 4))
this .nAllocationGranularity = StrToLong(SUBSTR (m.lcSysInfo, 29, 4))
this .nReserved = StrToLong(SUBSTR (m.lcSysInfo, 33, 4))
#DEFINE PROCESSOR_INTEL_386 386
#DEFINE PROCESSOR_INTEL_486 486
#DEFINE PROCESSOR_INTEL_PENTIUM 586
#DEFINE PROCESSOR_MIPS_R4000 4000
#DEFINE PROCESSOR_ALPHA_21064 21064
DO CASE
CASE this .nProcessorType = PROCESSOR_INTEL_386
this .cProcessorName = "INTEL 386"
CASE this .nProcessorType = PROCESSOR_INTEL_486
this .cProcessorName = "INTEL 486"
CASE this .nProcessorType = PROCESSOR_INTEL_PENTIUM
this .cProcessorName = "INTEL Pentium"
CASE this .nProcessorType = PROCESSOR_MIPS_R4000
this .cProcessorName = "MIPS R4000"
CASE this .nProcessorType = PROCESSOR_ALPHA_21064
this .cProcessorName = "ALPHA 21064"
ENDCASE
* ------------------------------------
PROCEDURE MemoryInfo && Peuple les informations mémoire
DECLARE GlobalMemoryStatus IN win32api STRING @lcMemStat
LOCAL lcMemStat
m.lcMemStat = LongToStr(32) + REPLICATE (CHR (0), 28)
GlobalMemoryStatus(@m.lcMemStat)
this .nMemLoad = StrToLong(SUBSTR (m.lcMemStat, 5, 4))
this .nMemPhysTot = StrToLong(SUBSTR (m.lcMemStat, 9, 4))
this .nMemPhysAvail = StrToLong(SUBSTR (m.lcMemStat, 13, 4))
this .nPageFileTot = StrToLong(SUBSTR (m.lcMemStat, 17, 4))
this .nPageFileAvail = StrToLong(SUBSTR (m.lcMemStat, 21, 4))
this .nMemVirtualTot = StrToLong(SUBSTR (m.lcMemStat, 25, 4))
this .nMemVirtualAvail = StrToLong(SUBSTR (m.lcMemStat, 29, 4))
* ------------------------------------
PROCEDURE ProcessorInfo && Peuple les informations sur le processeur
LOCAL loWMIService, loItems, loItem
loWMIService = Getobject ("winmgmts:\\.\root\cimv2" )
loItems = loWMIService.ExecQuery("Select * from Win32_Processor" )
For Each loItem In loItems
this .nAddressWidth = loItem.AddressWidth
this .nArchitecture = loItem.Architecture
this .nAvailability = loItem.Availability
this .nCpuStatus = loItem.CpuStatus
this .nCurrentClockSpeed = loItem.CurrentClockSpeed
this .nDataWidth = loItem.DataWidth
this .cDescription = Alltrim (loItem.Description )
this .cDeviceID = Alltrim (loItem.DeviceID)
this .nExtClock = loItem.ExtClock
this .nFamily = loItem.Family
this .nL2CacheSize = loItem.L2CacheSize
this .nL2CacheSpeed = loItem.L2CacheSpeed
this .nLevel = loItem.Level
this .nLoadPercentage = loItem.LoadPercentage
this .cManufacturer = Alltrim (loItem.Manufacturer)
this .nMaxClockSpeed = loItem.MaxClockSpeed
this .cProcessorFullName = Alltrim (loItem.Name )
this .cPNPDeviceID = loItem.PNPDeviceID
this .cProcessorId = Alltrim (loItem.ProcessorId)
this .nProcessorType = loItem.ProcessorType
this .nRevision = loItem.Revision
this .cRole = Alltrim (loItem.Role)
this .cSocketDesignation = Alltrim (loItem.SocketDesignation)
this .nStatusInfo = loItem.StatusInfo
this .cStepping = Alltrim (loItem.Stepping)
this .cUniqueId = Alltrim (loItem.UniqueId)
this .nUpgradeMethod = loItem.UpgradeMethod
this .cVersion = Alltrim (loItem.Version )
this .nVoltageCaps = loItem.VoltageCaps
Next
ENDDEFINE && CLASS abMachineInfo
* ==================================
PROCEDURE abMachineInfo_Test && Teste abMachineInfo
LOCAL lnSeconds, loMI as abMachineInfo of abDev.prg
loMI = CreateObject ('abMachineInfo' )
#DEFINE MEM_DISP_FORMAT '9 999 999 999'
lnSeconds = Seconds ()
loMI.systemInfo()
lnSeconds = Seconds () - m.lnSeconds
MessageBox (;
"Informations Système:" + CR + ;
"- Identifiant OEM: " + Transform (m.loMI.nOEMid) + CR + ;
"- Taille de page : " + Transform (m.loMI.nPageSize) + CR + ;
"- Adresse application minimum : " + Transform (m.loMI.nAppAddrMin, MEM_DISP_FORMAT) + CR +;
"- Adresse application maximum : " + Transform (m.loMI.nAppAddrMax, MEM_DISP_FORMAT) + CR + ;
"- Masque de processeur: " + Transform (m.loMI.nProcessorMask) + CR + ;
"- Nombre de processeurs: " + Transform (m.loMI.nProcessors) + CR + ;
"- Nom du processeur : " + m.loMI.cProcessorName + CR + ;
"- Granularité d'allocation (NDR?): " + Transform (m.loMI.nAllocationGranularity) + CR + ;
+ CR + "Temps d'exécution : " + Transform (m.lnSeconds) + " secondes" ;
,64)
lnSeconds = Seconds ()
loMI.memoryInfo()
lnSeconds = Seconds () - m.lnSeconds
MessageBox (;
"Informations Mémoire:" + CR + ;
"- Mémoire utilisée : " + Transform (m.loMI.nMemLoad) + '%' + CR + ;
"- Mémoire physique totale : " + Transform (m.loMI.nMemPhysTot, MEM_DISP_FORMAT) + " octets" + CR + ;
"- Mémoire physique disponible : " + Transform (m.loMI.nMemPhysAvail, MEM_DISP_FORMAT) + " octets" + CR + ;
"- Mémoire paginée totale : " + Transform (m.loMI.nPageFileTot, MEM_DISP_FORMAT) + " octets" + CR + ;
"- Mémoire paginée disponible : " + Transform (m.loMI.nPageFileAvail, MEM_DISP_FORMAT) + " octets" + CR + ;
"- Mémoire virtuelle totale : " + Transform (m.loMI.nMemVirtualTot, MEM_DISP_FORMAT) + " octets" + CR + ;
"- Mémoire virtuelle disponible : " + Transform (m.loMI.nMemVirtualAvail, MEM_DISP_FORMAT) + " octets" + CR + ;
+ CR + "Temps d'exécution : " + Transform (m.lnSeconds) + " secondes" ;
,64)
lnSeconds = Seconds ()
loMI.processorInfo()
lnSeconds = Seconds () - m.lnSeconds
MessageBox (;
"- Address Width : " + Transform (m.loMI.nAddressWidth) + CR + ;
"- Architecture : " + Transform (m.loMI.nArchitecture) + CR + ;
"- Availability : " + Transform (m.loMI.nAvailability) + CR + ;
"- CPU Status : " + Transform (m.loMI.nCpuStatus) + CR + ;
"- Current Clock Speed : " + Transform (m.loMI.nCurrentClockSpeed) + CR + ;
"- Data Width : " + Transform (m.loMI.nDataWidth) + CR + ;
"- Description : " + Transform (m.loMI.cDescription) + CR + ;
"- Device ID : " + Transform (m.loMI.cDeviceID) + CR + ;
"- Ext Clock : " + Transform (m.loMI.nExtClock) + CR + ;
"- Family : " + Transform (m.loMI.nFamily) + CR + ;
"- L2 Cache Size : " + Transform (m.loMI.nL2CacheSize) + CR + ;
"- L2 Cache Speed : " + Transform (m.loMI.nL2CacheSpeed) + CR + ;
"- Level : " + Transform (m.loMI.nLevel) + CR + ;
"- Load Percentage : " + Transform (m.loMI.nLoadPercentage) + CR + ;
"- Manufacturer : " + Transform (m.loMI.cManufacturer) + CR + ;
"- Maximum Clock Speed : " + Transform (m.loMI.nMaxClockSpeed) + CR + ;
"- Processor Full Name : " + Transform (m.loMI.cProcessorFullName) + CR + ;
"- PNP Device ID : " + Transform (m.loMI.cPNPDeviceID) + CR + ;
"- Processor Id : " + Transform (m.loMI.cProcessorId) + CR + ;
"- Processor Type : " + Transform (m.loMI.nProcessorType) + CR + ;
"- Revision : " + Transform (m.loMI.nRevision) + CR + ;
"- Role : " + Transform (m.loMI.cRole) + CR + ;
"- Socket Designation : " + Transform (m.loMI.cSocketDesignation) + CR + ;
"- Status Information : " + Transform (m.loMI.nStatusInfo) + CR + ;
"- Stepping : " + Transform (m.loMI.cStepping) + CR + ;
"- Unique Id : " + Transform (m.loMI.cUniqueId) + CR + ;
"- Upgrade Method : " + Transform (m.loMI.nUpgradeMethod) + CR + ;
"- Version : " + Transform (m.loMI.cVersion) + CR + ;
"- Voltage Caps : " + Transform (m.loMI.nVoltageCaps)+ CR + ;
+ CR + "Temps d'exécution : " + Transform (m.lnSeconds) + " secondes" ;
,64)
* ------------------------------------
FUNCTION LongToStr && Représentation ASCII d'un entier 32 bits positif
LPARAMETERS ;
tnLongVal && Entier 32 bits positif
LOCAL lcResult
lcResult = Space (0)
LOCAL i, lnLongVal
lnLongVal = m.tnLongVal
FOR i = 24 TO 0 STEP -8
lcResult = Chr (Int (m.lnLongVal/(2^m.i))) + m.lcResult
lnLongval = Mod (m.lnLongVal, (2^m.i))
NEXT
RETURN lcResult
* ------------------------------------
FUNCTION StrToLong && Entier 32 bits positif à partir de sa représentation ASCCI
LPARAMETERS ;
tcLongStr && Représentation ASCII d'un entier 32 bits positif
LOCAL lnResult
lnResult = 0
LOCAL i, lcLongStr
lcLongStr = m.tcLongStr
FOR i = 0 TO 24 STEP 8
lnResult = m.lnResult + (Asc (m.lcLongStr) * (2^m.i))
lcLongStr = Right (m.lcLongStr, Len (m.lcLongStr) - 1)
NEXT
RETURN lnResult
Commentaires
Je suis débutant et je voudrais savoir comment l'utiliser.
Merci