Code : Tout sélectionner
;Diagnostic
; sur un programme de Andre (2004), DataMiner (2005) ..... et d'autres qui ont essayé :)
;et sur une mise à jour de falsam (19.09.2012)
;créé par Micoute (28/07/2016)
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Actions
#Sortie
#Aucune
EndEnumeration
Enumeration Autres_gadgets
#Canvas
#Liste1
#Liste2
#Liste3
#Liste4
#Liste5
#Liste6
#Liste7
EndEnumeration
Structure Liste
Titre.s
Largeur.i
EndStructure
;WMI constants
#RPC_C_AUTHN_LEVEL_CONNECT = 2
#RPC_C_IMP_LEVEL_IDENTIFY = 2
#EOAC_NONE = 0
#RPC_C_AUTHN_WINNT = 10
#RPC_C_AUTHZ_NONE = 0
#RPC_C_AUTHN_LEVEL_CALL = 3
#RPC_C_IMP_LEVEL_IMPERSONATE = 3
#CLSCTX_INPROC_SERVER = 1
#WBEMFlagReturnImmediately = 16
#wbemFlagForwardOnly = 32
;#WBEM_INFINITE = $FFFFFFFF
#IFlags = #wbemFlagReturnImmediately + #wbemFlagForwardOnly
Structure WMIClass
Property.s
Value.s
EndStructure
;Mémoire
Structure MemoirePhysique
BankLabel.s
Capacity.i
Caption.s
DataWidth.i
DeviceLocator.s
FormFactor.i
Speed.i
Tag.s
EndStructure
Structure Memoire
Banque.s
Capacite.i
Titre.s
LargeurDonnee.i
Position.s
Facteur.s
Vitesse.i
Tag.s
EndStructure
;Carte graphique
Structure Video
DeviceName.s
DisplayFrequency.i
LogPixels.i
PelsHeight.i
PelsWidth.i
EndStructure
Structure Graphique
Nom.s
Frequence.i
Dpi.i
Hauteur.i
Largeur.i
EndStructure
;Carte mère
Structure Carte_Mere
Caption.s
Manufacturer.s
Product.s
SerialNumber.s
Status.s
Tag.s
Version.s
EndStructure
Structure Mere_Base
Availability.s
Caption.s
Description.s
DeviceID.s
Name.s
PNPDeviceID.s
PrimaryBusType.s
SecondaryBusType.s
SystemName.s
EndStructure
;Disques
Structure Disque
Lecteur.s
Type.s
Numero.s
Systeme.s
Nom.s
NumeroSerie.s
Capacite.s
EspaceLibre.s
EspaceOccupe.s
PourcentOccupe.f
EndStructure
Structure Logique
Description.s
Id.s
Type.i
Systeme.s
EspaceLibre.q
LngComposantMaxi.i
Taille.q
NomVolume.s
NumSerieVol.s
EndStructure
;Bios
Structure Bios
Caption.s
CurrentLanguage.s
Manufacturer.s
SerialNumber.s
EndStructure
;Bus
Structure Bus_Win32
BusNum.i
BusType.i
Caption.s
EndStructure
Structure Bus
TitreBus.s
NbreBus.i
TypeBus.i
EndStructure
Global.i Police = LoadFont(Police, "DejaVu Sans Mono", 20, #PB_Font_Bold)
Global.i Police2 = LoadFont(Police2, "DejaVu Sans Mono", 12, #PB_Font_Bold)
Global.i x = 250, y = 50, CoulFond = $404040, CoulFond2 = $606060, i, action = #Aucune, Evenement
Global NewList WMIResult.WMIClass()
;Mémoire
Global NewList Maliste.s(), NewList Memoire.MemoirePhysique(), Dim Donnee1.Liste(7)
Global.Memoire Barrette
;Carte graphique
Global NewList Maliste2.s(), NewList Appareil.Video(), NewList Carte.Graphique(), Dim Donnee2.Liste(4)
Global.Graphique Carte2
;Carte mère
Global.s NewList Maliste3.s(), NewList Maliste4(), NewList CarteMere.Carte_Mere(), NewList CarteBase.Mere_Base(), Dim Donnee3.liste(6), Dim Donnee4.liste(7)
Global Carte3.Carte_Mere, Carte4.Mere_Base
;Disque
Global.Disque LeDisque
Global.s NewList Maliste5(), NewList Disque.Logique()
Global.Liste Dim Donnee5(8)
Global TypeDisque.s, valeur.s, valeur2.s, valeur3.s, Capacite.q, Occupe.q
;Bios
Global$ NewList Produit.Bios(), Dim Donnee6.Liste(3)
;Bus
Global$ NewList MaListe7(), NewList Data_Bus.Bus_Win32(), Dim donnee7.liste(2), Resultat$
Global.Bus_Win32 MesBus
ExamineDesktops()
Global.i Largeur = DesktopWidth(0) , Hauteur = DesktopHeight(0) , Profondeur = DesktopDepth(0)
Largeur-5 : Hauteur-30
Procedure.l ansi2bstr(ansi.s)
Protected Size.l, i.i, tmp.s
;size=MultiByteToWideChar_(#CP_ACP,0,ansi,Len(ansi),"","")
*ansi = AllocateMemory(SizeOf(String))
size=MultiByteToWideChar_(#CP_ACP,0,*ansi,Len(ansi),#Null,#Null)
Dim unicode.w(size)
;MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size);#CP_ACP
MultiByteToWideChar_(#CP_ACP, 0, *ansi, Len(ansi), unicode(), size);#CP_ACP
For i=0 To size
tmp + Hex(unicode(i),#PB_Unicode)
Next
ProcedureReturn SysAllocString_(@unicode())
EndProcedure
Procedure bstr2string (bstr)
Static result.s
result = PeekS(bstr, -1, #PB_Unicode)
ProcedureReturn @result
EndProcedure
; Interrogate WMI Database
Procedure WMIQuery(WMIReqSql.s, List WMI.WMIClass())
Protected Mem.l
Protected hres.i
Protected loc.IWbemLocator
Protected svc.IWbemServices
Protected pUnk.IUnknown
Protected pEnumerator.IEnumWbemClassObject
Protected pclsObj.IWbemClassObject
Protected uReturn
Protected sf.l
Protected lBound.i, uBound.i, i.i
Protected temp.l, x.Variant, Type.i
Protected Property.s, Val.s
Protected nDim.i, plUbound.i, z.i, rgVar
ClearList(WMI())
; --- Step 1: Initialize COM parameters with a call to CoInitializeEx
CoInitializeEx_(0, #COINIT_MULTITHREADED)
; --- Step 2: Initialize COM process security by calling CoInitializeSecurity.
hres=CoInitializeSecurity_(0, -1,0,0,#RPC_C_AUTHN_LEVEL_CONNECT,#RPC_C_IMP_LEVEL_IDENTIFY,0,#EOAC_NONE,0)
If hres <> 0
MessageRequester("ERROR", "unable to call CoInitializeSecurity", #MB_OK)
CoUninitialize_()
ProcedureReturn #False
EndIf
; --- Step 3: Obtain the initial locator to WMI by calling CoCreateInstance.
hres=CoCreateInstance_(?CLSID_WbemLocator,0,#CLSCTX_INPROC_SERVER,?IID_IWbemLocator,@loc.IWbemLocator)
If hres <> 0
MessageRequester("ERROR", "unable to call CoCreateInstance", #MB_OK)
loc\release()
CoUninitialize_()
ProcedureReturn #False
EndIf
; --- Step 4: Obtain a pointer to IWbemServices for the root\cimv2 namespace on the local computer by calling IWbemLocator::ConnectServer.
;hres=loc\ConnectServer(Ansi2Uni("root\cimv2"),0,0,0,0,0,0,@svc)
If #PB_Compiler_Unicode = 1;we create unicode application
hres=loc\ConnectServer(@"root\cimv2" ,0,0,0,0,0,0,@svc.IWbemServices)
Else; non unicode
hres=loc\ConnectServer(ansi2bstr("root\cimv2"),0,0,0,0,0,0,@svc.IWbemServices)
EndIf
If hres <> 0
MessageRequester("ERROR", "unable to call IWbemLocator::ConnectServer", #MB_OK)
svc\release()
loc\release()
CoUninitialize_()
ProcedureReturn #False
EndIf
; --- Step 5: Set IWbemServices proxy security so the WMI service can impersonate the client by calling CoSetProxyBlanket.
hres=svc\queryinterface(?IID_IUnknown,@pUnk.IUnknown)
hres=CoSetProxyBlanket_(svc,#RPC_C_AUTHN_WINNT,#RPC_C_AUTHZ_NONE,0,#RPC_C_AUTHN_LEVEL_CALL,#RPC_C_IMP_LEVEL_IMPERSONATE,0,#EOAC_NONE)
If hres <> 0
MessageRequester("ERROR", "unable to call CoSetProxyBlanket", #MB_OK)
svc\release()
loc\release()
CoUninitialize_()
ProcedureReturn #False
EndIf
hres=CoSetProxyBlanket_(pUnk,#RPC_C_AUTHN_WINNT,#RPC_C_AUTHZ_NONE,0,#RPC_C_AUTHN_LEVEL_CALL,#RPC_C_IMP_LEVEL_IMPERSONATE,0,#EOAC_NONE)
If hres <> 0
MessageRequester("ERROR", "unable to call CoSetProxyBlanket", #MB_OK)
svc\release()
loc\release()
CoUninitialize_()
ProcedureReturn #False
EndIf
pUnk\release()
; --- Step 6: Use the IWbemServices pointer to make requests of WMI.
;hres=svc\ExecQuery(Ansi2Uni("WQL"), Ansi2Uni(WMIReqSql), #IFlags,0,@pEnumerator)
;hres=svc\ExecQuery(@"WQL",@WMIobj, #IFlags,0,@pEnumerator.IEnumWbemClassObject)
If #PB_Compiler_Unicode = 1
hres=svc\ExecQuery(@"WQL",@WMIReqSql, #IFlags,0,@pEnumerator.IEnumWbemClassObject)
Else
hres=svc\ExecQuery(ansi2bstr("WQL"),ansi2bstr(WMIReqSql), #IFlags,0,@pEnumerator.IEnumWbemClassObject)
EndIf
If hres <> 0
MessageRequester("ERROR", "unable to call IWbemServices::ExecQuery", #MB_OK)
svc\Release()
loc\Release()
pEnumerator\Release()
CoUninitialize_()
ProcedureReturn #False
EndIf
; --- Step 7: Get the data from the WQL query. The IEnumWbemClassObject pointer is linked to the data objects that the query returned,
; --- and the data objects can be retrieved with the IEnumWbemClassObject::Next method. This method links the data objects to an IWbemClassObject pointer
; --- that is passed into the method. Use the IWbemClassObject::Get method to get the desired information from the data objects.
mem=AllocateMemory(1000)
hres=pEnumerator\reset()
Repeat
hres = pEnumerator\Next(#WBEM_INFINITE, 1, @pclsObj.IWbemClassObject, @uReturn)
If uReturn = 0
Break
EndIf
; get a list with the names of the properties.
hres=pclsObj\GetNames(0, 0, 0,@sf.l); get a list with the names of the properties.
SafeArrayGetLBound_(sf, 1, @lBound)
SafeArrayGetUBound_(sf, 1, @uBound)
Dim indices(1)
For i = lbound To ubound
indices(0) = i
SafeArrayGetElement_(sf, @indices(), @temp)
If temp
Property = PeekS(temp, -1, #PB_Unicode)
If #PB_Compiler_Unicode = 1
hres=pclsObj\get(@Property, 0, mem, 0, 0)
Else
hres=pclsObj\get(ansi2bstr(Property), 0, mem, 0, 0)
EndIf
type=PeekW(mem)
Select type
Case 8
val.s=PeekS(bstr2string(PeekL(mem+8)))
Case 3
val.s=Str(PeekL(mem+8))
Default
val.s=""
EndSelect
If FindString(WMIReqSql,"*",1) <> 0;we need everything, not just some specific properties
AddElement(WMI())
WMI()\Property = Property
WMI()\Value = val
ElseIf Left(Property,1)<>"_";we need some specific properties, not all, not these starting with '_'.
AddElement(WMI())
WMI()\Property = Property
WMI()\Value = val
EndIf
EndIf
Next
Until uReturn = 0
; --- Step 8: Cleanup
svc\release()
loc\release()
pEnumerator\release()
If uReturn
pclsObj\release()
EndIf
CoUninitialize_()
ProcedureReturn #True
EndProcedure
Procedure CentrerTexte(Fenetre.i, y.i, Texte.s, Couleur.i) ; Centre le texte dans la fenêtre à la hauteur et à la couleur choisies.
DrawText((DesktopWidth(Fenetre) - TextWidth(Texte)) / 2, y, Texte, Couleur)
EndProcedure
Procedure CentrerTexteXY(X0.i, X1.i, y.i, Texte.s, Couleur.i) ; Centre le texte entre X0 et X1 à la hauteur et à la couleur choisies.
DrawText((X1 + X0) / 2, y, Texte, Couleur)
EndProcedure
;{ Mémoire
If WMIQuery("Select * from Win32_PhysicalMemory", WMIResult())
ForEach WMIResult()
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Select WMIResult()\Property
Case "BankLabel"
AddElement(Memoire())
Memoire()\BankLabel = WMIResult()\Value
Case "Capacity"
Memoire()\Capacity = Val(WMIResult()\Value)/1024/1024/1024
Case "Caption"
Memoire()\Caption = WMIResult()\Value
Case "DataWidth"
Memoire()\DataWidth = Val(WMIResult()\Value)
Case "DeviceLocator"
Memoire()\DeviceLocator = WMIResult()\Value
Case "FormFactor"
Memoire()\FormFactor = Val(WMIResult()\Value)
Case "Speed"
Memoire()\Speed = Val(WMIResult()\Value)
Case "Tag"
Memoire()\Tag = WMIResult()\Value
EndSelect
Next
EndIf
;Mémoire
ForEach Memoire()
With Barrette
\Banque = Memoire()\BankLabel
\Capacite = Memoire()\Capacity
\Titre = Memoire()\Caption
\LargeurDonnee = Memoire()\DataWidth
\Position = Memoire()\DeviceLocator
;\Facteur = Memoire()\FormFactor
Select Memoire()\FormFactor
Case 0
\Facteur = "Unknown"
Case 1
\Facteur = "Other"
Case 2
\Facteur = "SIP"
Case 3
\Facteur = "DIP"
Case 4
\Facteur = "ZIP"
Case 5
\Facteur = "SOJ"
Case 6
\Facteur = "Proprietary"
Case 7
\Facteur = "SIMM"
Case 8
\Facteur = "DIMM"
Case 9
\Facteur = "TSOP"
Case 10
\Facteur = "PGA"
Case 11
\Facteur = "RIMM"
Case 12
\Facteur = "SODIMM"
Case 13
\Facteur = "SRIMM"
Case 14
\Facteur = "SMD"
Case 15
\Facteur = "SSMP"
Case 16
\Facteur = "QFP"
Case 17
\Facteur = "TQFP"
Case 18
\Facteur = "SOIC"
Case 19
\Facteur = "LCC"
Case 20
\Facteur = "PLCC"
Case 21
\Facteur = "BGA"
Case 22
\Facteur = "FPBGA"
Case 23
\Facteur = "LGA"
EndSelect
\Vitesse = Memoire()\Speed
\Tag = Memoire()\Tag
EndWith
AddElement(Maliste())
With Barrette
Maliste() = \Banque
Maliste() + #LF$ + \Capacite + " Go"
Maliste() + #LF$ + \Titre
Maliste() + #LF$ + \LargeurDonnee + " bits"
Maliste() + #LF$ + \Position
Maliste() + #LF$ + \Facteur
Maliste() + #LF$ + \Vitesse + " ns"
Maliste() + #LF$ + \Tag
EndWith
Next
;}
;{ Carte graphique
If WMIQuery("Select * from Win32_DisplayConfiguration", WMIResult())
ForEach WMIResult()
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Select WMIResult()\Property
Case "DeviceName"
AddElement(Appareil())
Appareil()\DeviceName = WMIResult()\Value
Case "DisplayFrequency"
Appareil()\DisplayFrequency = Val(WMIResult()\Value)
Case "LogPixels"
Appareil()\LogPixels = Val(WMIResult()\Value)
Case "PelsHeight"
Appareil()\PelsHeight = Val(WMIResult()\Value)
Case "PelsWidth"
Appareil()\PelsWidth = Val(WMIResult()\Value)
EndSelect
Next
EndIf
;Carte graphique
ForEach Appareil()
With Carte2
\Nom = Appareil()\DeviceName
\Frequence = Appareil()\DisplayFrequency
\Dpi = Appareil()\LogPixels
\Hauteur = Appareil()\PelsHeight
\Largeur = Appareil()\PelsWidth
EndWith
AddElement(Maliste2())
With Carte2
Maliste2() = \Nom
Maliste2() + #LF$ + \Frequence + " Hz"
Maliste2() + #LF$ + \Dpi + " ppp"
Maliste2() + #LF$ + \Hauteur + " px"
Maliste2() + #LF$ + \Largeur + " px"
EndWith
Next
;}
;{ Carte de base
If WMIQuery("Select * from Win32_MotherboardDevice", WMIResult())
ForEach WMIResult()
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Select WMIResult()\Property
Case "Availability"
AddElement(CarteBase())
CarteBase()\Availability = WMIResult()\Value
Case "Caption"
CarteBase()\Caption = WMIResult()\Value
Case "Description"
CarteBase()\Description = WMIResult()\Value
Case "DeviceID"
CarteBase()\DeviceID = WMIResult()\Value
Case "Name"
CarteBase()\Name = WMIResult()\Value
Case "PNPDeviceID"
CarteBase()\PNPDeviceID = WMIResult()\Value
Case "PrimaryBusType"
CarteBase()\PrimaryBusType = WMIResult()\Value
Case "SecondaryBusType"
CarteBase()\SecondaryBusType = WMIResult()\Value
Case "SystemName"
CarteBase()\SystemName = WMIResult()\Value
EndSelect
Next
EndIf
Procedure$ Disponibilite_Base()
Select Val(CarteBase()\Availability )
Case 1 : Rep$ = "Autre"
Case 2 : Rep$ = "Inconnue"
Case 3 : Rep$ = "En cours d'exécution ou pleine puissance"
Case 4 : Rep$ = "Avertissement"
Case 5 : Rep$ = "En test"
Case 6 : Rep$ = "Non applicable"
Case 7 : Rep$ = "Mise hors tension"
Case 8 : Rep$ = "Hors ligne"
Case 9 : Rep$ = "Hors service"
Case 10 : Rep$ = "Dégradée"
Case 11 : Rep$ = "Non installée"
Case 12 : Rep$ = "Erreur Installation"
Case 13 : Rep$ = "Power Save - inconnu"
Case 14 : Rep$ = "Power save - Mode d'alimentation faible"
Case 15 : Rep$ = "Power Save - Veille"
Case 16 : Rep$ = "Cycle d'alimentation"
Case 17 : Rep$ = "Power Save - AVERTISSEMENT"
EndSelect
ProcedureReturn Rep$
EndProcedure
Procedure$ Libelle_Base()
ProcedureReturn CarteBase()\Caption
EndProcedure
Procedure$ Description_Base()
ProcedureReturn CarteBase()\Description
EndProcedure
Procedure$ ID_Base()
ProcedureReturn CarteBase()\DeviceID
EndProcedure
Procedure$ Nom_Base()
ProcedureReturn CarteBase()\Name
EndProcedure
Procedure$ IdPNP_Base()
ProcedureReturn CarteBase()\PNPDeviceID
EndProcedure
Procedure$ BusPrimaire_Base()
ProcedureReturn CarteBase()\PrimaryBusType
EndProcedure
Procedure$ BusSecondaire_Base()
ProcedureReturn CarteBase()\SecondaryBusType
EndProcedure
Procedure$ NomSysteme_Base()
ProcedureReturn CarteBase()\SystemName
EndProcedure
ForEach CarteBase()
With Carte4
\Availability = Disponibilite_Base()
\Caption = Libelle_Base()
\Description = Description_Base()
\DeviceID = ID_Base()
\Name = Nom_Base()
;\PNPDeviceID = IdPNP_Base()
\PrimaryBusType = BusPrimaire_Base()
\SecondaryBusType = BusSecondaire_Base()
\SystemName = NomSysteme_Base()
EndWith
AddElement(Maliste4())
With Carte4
Maliste4() = \Availability
Maliste4() + #LF$ + \Caption
Maliste4() + #LF$ + \Description
Maliste4() + #LF$ + \DeviceID
Maliste4() + #LF$ + \Name
Maliste4() + #LF$ + \PrimaryBusType
Maliste4() + #LF$ + \SecondaryBusType
Maliste4() + #LF$ + \SystemName
EndWith
Next
;}
;{ Carte mère
If WMIQuery("Select * from Win32_BaseBoard", WMIResult())
ForEach WMIResult()
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Select WMIResult()\Property
Case "Manufacturer"
AddElement(CarteMere())
CarteMere()\Manufacturer = WMIResult()\Value
Case "Product"
CarteMere()\Product = WMIResult()\Value
Case "SerialNumber"
CarteMere()\SerialNumber = WMIResult()\Value
Case "Status"
CarteMere()\Status = WMIResult()\Value
Case "Tag"
CarteMere()\Tag = WMIResult()\Value
Case "Version"
CarteMere()\Version = WMIResult()\Value
EndSelect
Next
EndIf
; Carte mère
Procedure$ TypeCarte_Mere()
ProcedureReturn CarteBase()\Caption
EndProcedure
Procedure$ Fabricant_Mere()
ProcedureReturn CarteMere()\Manufacturer
EndProcedure
Procedure$ Produit_Mere()
ProcedureReturn CarteMere()\Product
EndProcedure
Procedure$ NumSerie_Mere()
ProcedureReturn CarteMere()\SerialNumber
EndProcedure
Procedure$ Statut_Mere()
ProcedureReturn CarteMere()\Status
EndProcedure
Procedure$ Balise_Mere()
ProcedureReturn CarteMere()\Tag
EndProcedure
Procedure$ Version_Mere()
ProcedureReturn CarteMere()\Version
EndProcedure
ForEach CarteMere()
AddElement(Maliste3())
With Carte3
Maliste3() = TypeCarte_Mere()
Maliste3() + #LF$ + Fabricant_Mere()
Maliste3() + #LF$ + Produit_Mere()
Maliste3() + #LF$ + NumSerie_Mere()
Maliste3() + #LF$ + Statut_Mere()
Maliste3() + #LF$ + Balise_Mere()
Maliste3() + #LF$ + Version_Mere()
EndWith
Next
;}
;{ Disque
If WMIQuery("Select * from Win32_LogicalDisk", WMIResult())
ForEach WMIResult()
Select WMIResult()\Property
Case "Description"
AddElement(Disque())
Disque()\Description = WMIResult()\Value
Case "DeviceID"
Disque()\Id = WMIResult()\Value
Case "DriveType"
Disque()\Type = Val(WMIResult()\Value)
Case "FileSystem"
Disque()\Systeme = WMIResult()\Value
Case "FreeSpace"
Disque()\EspaceLibre = Val(WMIResult()\Value)
Case "MaximumComponentLength"
Disque()\LngComposantMaxi = Val(WMIResult()\Value)
Case "Size"
Disque()\Taille = Val(WMIResult()\Value)
Case "VolumeName"
Disque()\NomVolume = WMIResult()\Value
Case "VolumeSerialNumber"
Disque()\NumSerieVol = WMIResult()\Value
EndSelect
Next
EndIf
ForEach Disque()
If Disque()\NumSerieVol
Capacite = Disque()\Taille
If Disque()\Taille >= 1125899906842624
Capacite = Disque()\Taille/1125899906842624
Global valeur.s = " Po "
Global.s valeur3 = valeur
ElseIf Disque()\Taille >= 1099511627776
Capacite = Disque()\Taille/1099511627776
valeur = " To "
valeur3 = valeur
ElseIf Disque()\Taille >= 1073741824
Capacite = Disque()\Taille/1073741824
valeur = " Go "
valeur3 = valeur
ElseIf Disque()\Taille >= 1048576
Capacite = Disque()\Taille/1048576
valeur = " Mo "
valeur3 = valeur
ElseIf Disque()\Taille >= 1024
Capacite = Disque()\Taille/1024
valeur = " Ko "
valeur3 = valeur
Else
valeur = " octets "
valeur3 = valeur
EndIf
If Disque()\Type = 5
Capacite = Disque()\Taille/1024
valeur = " Go "
EndIf
If Disque()\EspaceLibre >= 1125899906842624
Capacite = Disque()\Taille/1125899906842624
Global.s valeur2 = " Po "
ElseIf Disque()\EspaceLibre >= 1099511627776
Disque()\EspaceLibre = Disque()\EspaceLibre/1099511627776
valeur2 = " To "
ElseIf Disque()\EspaceLibre >= 1073741824
Disque()\EspaceLibre = Disque()\EspaceLibre/1073741824
valeur2 = " Go "
ElseIf Disque()\EspaceLibre >= 1048576
Disque()\EspaceLibre = Disque()\EspaceLibre/1048576
valeur2 = " Mo "
ElseIf Disque()\EspaceLibre >= 1024
Disque()\EspaceLibre = Disque()\EspaceLibre/1024
valeur2 = " Ko "
Else
valeur2 = " octets "
EndIf
With LeDisque
\Lecteur = Disque()\ID
\Nom = Disque()\NomVolume
\Systeme = Disque()\Systeme
\Type = Disque()\Description
\NumeroSerie = Disque()\NumSerieVol
\Capacite = RSet(StrF(Capacite),3, " ") +valeur
\EspaceLibre = RSet(StrF(Disque()\EspaceLibre),3, " ") + valeur2
\EspaceOccupe = RSet(StrF(ValF(\Capacite) - ValF(\EspaceLibre)),3, " ") + valeur3
\PourcentOccupe = ValF(\EspaceOccupe) * 100 / ValF(\Capacite)
EndWith
AddElement(Maliste5())
With LeDisque
Maliste5() = \Lecteur
Maliste5() + #LF$ + \Nom
Maliste5() + #LF$ + \Systeme
Maliste5() + #LF$ + \NumeroSerie
Maliste5() + #LF$ + \Type
Maliste5() + #LF$ + \Capacite
Maliste5() + #LF$ + \EspaceLibre
Maliste5() + #LF$ + \EspaceOccupe
Maliste5() + #LF$ + RSet(StrF(\PourcentOccupe,3), 6, " ") + " %"
EndWith
EndIf
Next
;}
;{ Bios
If WMIQuery("Select * from Win32_BIOS", WMIResult())
ForEach WMIResult()
Select WMIResult()\Property
Case "Caption"
AddElement(Produit())
Produit()\Caption = Mid(WMIResult()\Value,6,4)+" "+Left(WMIResult()\Value,4)+": "+Mid(WMIResult()\Value,15,3)+Mid(WMIResult()\Value,12,3)+Right(WMIResult()\Value,25)
Case "CurrentLanguage"
Produit()\CurrentLanguage = WMIResult()\Value + " "
Case "Manufacturer"
Produit()\Manufacturer = WMIResult()\Value + " "
Case "SerialNumber"
Produit()\SerialNumber = WMIResult()\Value + " "
EndSelect
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Next
EndIf
Procedure$ Bios_Produit()
ProcedureReturn Produit()\Caption
EndProcedure
Procedure$ Bios_Langage_Courant()
ProcedureReturn Produit()\CurrentLanguage
EndProcedure
Procedure$ Bios_Fabricant()
ProcedureReturn Produit()\Manufacturer
EndProcedure
Procedure$ Bio_Num_Serie()
ProcedureReturn Produit()\SerialNumber
EndProcedure
;}
;{ Bus
If WMIQuery("Select * from Win32_Bus", WMIResult())
ForEach WMIResult()
;Debug WMIResult()\Property + " = " + WMIResult()\Value
Select WMIResult()\Property
Case "BusNum"
AddElement(Data_Bus())
Data_Bus()\BusNum = Val(WMIResult()\Value)
Case "TypeBus"
;AddElement(Data_Bus())
Data_Bus()\BusType = Val(WMIResult()\Value)
Case "Caption"
;AddElement(Data_Bus())
Data_Bus()\Caption = WMIResult()\Value
EndSelect
Next
EndIf
Procedure.s TitreBus()
ProcedureReturn Data_Bus()\Caption
EndProcedure
Procedure NbreBus()
ProcedureReturn Data_Bus()\BusNum
EndProcedure
Procedure$ TypeBus()
Select Data_Bus()\BusType
Case -1
Resultat$ = "Non défini"
Case 0
Resultat$ = "Interne"
Case 1
Resultat$ = "ISA"
Case 2
Resultat$ = "EISA"
Case 3
Resultat$ = "MicroChannel"
Case 4
Resultat$ = "TurboChannel"
Case 5
Resultat$ = "PCI"
Case 6
Resultat$ = "VME"
Case 7
Resultat$ = "NuBus"
Case 8
Resultat$ = "PCMCIA"
Case 9
Resultat$ = "C"
Case 10
Resultat$ = "MPI"
Case 11
Resultat$ = "MPSA"
Case 12
Resultat$ = "Processeur interne"
Case 13
Resultat$ = "Power interne"
Case 14
Resultat$ = "PNP ISA"
Case 15
Resultat$ = "PNP"
Case 16
Resultat$ = "Type interface maximum"
EndSelect
ProcedureReturn Resultat$
EndProcedure
ForEach Data_Bus()
With MesBus
\BusNum = NbreBus()
\BusType = Val(TypeBus())
\Caption = TitreBus()
EndWith
Next
ForEach Data_Bus()
AddElement(Maliste7())
With MesBus
Maliste7() = TitreBus()
Maliste7() + #LF$ + Str(NbreBus())
Maliste7() + #LF$ + TypeBus()
EndWith
Next
;}
;{ Données
;Mémoire
Donnee1(0)\Titre = "Banque "
Donnee1(0)\Largeur = 100
Donnee1(1)\Titre = "Capacité"
Donnee1(1)\Largeur = 110
Donnee1(2)\Titre = "Type de mémoire "
Donnee1(2)\Largeur = 220
Donnee1(3)\Titre = "Larg données"
Donnee1(3)\Largeur = 150
Donnee1(4)\Titre = "Emplacement"
Donnee1(4)\Largeur = 200
Donnee1(5)\Titre = "Facteur forme"
Donnee1(5)\Largeur = 150
Donnee1(6)\Titre = "Vitesse "
Donnee1(6)\Largeur = 100
Donnee1(7)\Titre = "Tag "
Donnee1(7)\Largeur = 200
;Carte graphique
Donnee2(0)\Titre = "Nom "
Donnee2(0)\Largeur = 250
Donnee2(1)\Titre = "Fréquence "
Donnee2(1)\Largeur = 120
Donnee2(2)\Titre = "DPI "
Donnee2(2)\Largeur = 120
Donnee2(3)\Titre = "Hauteur"
Donnee2(3)\Largeur = 120
Donnee2(4)\Titre = "Largeur "
Donnee2(4)\Largeur = 85
;Carte mère
Donnee3(0)\Titre = "Type carte "
Donnee3(0)\Largeur = 200
Donnee3(1)\Titre = "Fabricant "
Donnee3(1)\Largeur = 300
Donnee3(2)\Titre = "Produit "
Donnee3(2)\Largeur = 250
Donnee3(3)\Titre = "N° de série "
Donnee3(3)\Largeur = 200
Donnee3(4)\Titre ="Statut "
Donnee3(4)\Largeur = 100
Donnee3(5)\Titre = "Balise "
Donnee3(5)\Largeur = 150
Donnee3(6)\Titre = "Version "
Donnee3(6)\Largeur = 100
;Carte de base
Donnee4(0)\Titre =" Disponibilité "
Donnee4(0)\Largeur = 410
Donnee4(1)\Titre = " Libellé "
Donnee4(1)\Largeur = 120
Donnee4(2)\Titre = " Description "
Donnee4(2)\Largeur = 120
Donnee4(3)\Titre = " ID_Base "
Donnee4(3)\Largeur = 125
Donnee4(4)\Titre = "Nom "
Donnee4(4)\Largeur = 120
;Donnee4(5)\Titre = "Id PNP "
;Donnee4(5)\Largeur = 80
Donnee4(5)\Titre = "Bus Primaire "
Donnee4(5)\Largeur = 80
Donnee4(6)\Titre = "Bus Secondaire "
Donnee4(6)\Largeur = 130-10
Donnee4(7)\Titre = "Nom Système "
Donnee4(7)\Largeur = 120
Donnee5(0)\Titre = "ID "
Donnee5(0)\Largeur = 30
Donnee5(1)\Titre = "Nom du volume "
Donnee5(1)\Largeur = 200
Donnee5(2)\Titre = "Système "
Donnee5(2)\Largeur = 70
Donnee5(3)\Titre = "N° série "
Donnee5(3)\Largeur = 100
Donnee5(4)\Titre = "Description "
Donnee5(4)\Largeur = 210
Donnee5(5)\Titre = "Capacité "
Donnee5(5)\Largeur = 130
Donnee5(6)\Titre = "Libre "
Donnee5(6)\Largeur = 130
Donnee5(7)\Titre = "Occupé "
Donnee5(7)\Largeur = 130
Donnee5(8)\Titre = "% occupé "
Donnee5(8)\Largeur = 100
Donnee6(0)\Titre = "Produit "
Donnee6(0)\Largeur = 470
Donnee6(1)\Titre = "Langage courant "
Donnee6(1)\Largeur = 470
Donnee6(2)\Titre = "Fabricant "
Donnee6(2)\Largeur = 470
Donnee6(3)\Titre = "N° de série "
Donnee6(3)\Largeur = 230
donnee7(0)\Titre = "Description "
donnee7(0)\Largeur = 80
donnee7(1)\Titre = " Numéro de bus "
donnee7(1)\Largeur = 80
donnee7(2)\Titre = " Type de bus "
donnee7(2)\Largeur = 235
;}
Procedure Principale()
OpenWindow(#Fenetre_principale, 0, 0, Largeur, Hauteur, "Diagnotic WMI.pb",
#PB_Window_SystemMenu|#PB_Window_TitleBar)
CanvasGadget(#Canvas, 0, 0, Largeur, Hauteur, #PB_Canvas_ClipMouse)
StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, GadgetWidth(#Canvas), GadgetHeight(#Canvas), CoulFond)
StopDrawing()
DC = StartDrawing(CanvasOutput(#Canvas))
;{ Liste Mémoire
DrawingFont(Police2)
DrawingMode(#PB_2DDrawing_Transparent)
Y = TextHeight(" ")
CentrerTexte(#Fenetre_principale,Y,"Mémoire",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(315, Y, " "+Donnee1(0)\Titre + " " + Donnee1(1)\Titre + " " + Donnee1(2)\Titre + " " + Donnee1(3)\Titre + " " +
Donnee1(4)\Titre +" " +Donnee1(5)\Titre + " " + Donnee1(6)\Titre + " " + Donnee1(7)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste1, 315, Y, 1260, TextHeight(" ") * ListSize(Maliste()) + TextHeight(" "), Donnee1(0)\Titre, Donnee1(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 1 To ArraySize(Donnee1())
AddGadgetColumn(#Liste1, i, Donnee1(i)\Titre, Donnee1(i)\Largeur)
Next
ForEach Maliste()
AddGadgetItem(#Liste1, -1, Maliste())
Next
;}
;{ Liste Carte graphique
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste1) + TextHeight(" ")
CentrerTexte(#Fenetre_principale,Y,"Carte vidéo",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(595, Y, " "+Donnee2(0)\Titre + " " + Donnee2(1)\Titre + " " + Donnee2(2)\Titre + " " + Donnee2(3)\Titre + " " + Donnee2(4)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste2, 595, Y, 730, TextHeight(" ")* ListSize(Maliste2()) + TextHeight(" "), Donnee2(0)\Titre, Donnee2(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 1 To ArraySize(Donnee2())
AddGadgetColumn(#Liste2, i, Donnee2(i)\Titre, Donnee2(i)\Largeur)
Next
ForEach Maliste2()
AddGadgetItem(#Liste2, -1, Maliste2())
Next
;}
;{ Liste Carte mère
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste2) + TextHeight(" ")
CentrerTexte(#Fenetre_principale,Y,"Carte mère",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(305, Y, Donnee3(0)\Titre + Donnee3(1)\Titre + Donnee3(2)\Titre + Donnee3(3)\Titre + Donnee3(4)\Titre + Donnee3(5)\Titre + Donnee3(6)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste3, 305, Y, 1310, TextHeight(" ") * ListSize(Maliste3()) + TextHeight(" "), Donnee3(0)\Titre, Donnee3(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 1 To ArraySize(Donnee3())
AddGadgetColumn(#Liste3, i, Donnee3(i)\Titre, Donnee3(i)\Largeur)
Next
ForEach Maliste3()
AddGadgetItem(#Liste3, -1, Maliste3())
Next
;}
;{ Liste Carte de base
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste3) + TextHeight(" ")
CentrerTexte(#Fenetre_principale,Y,"Carte de base",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(250, Y, Donnee4(0)\Titre + Donnee4(2)\Titre + Donnee4(4)\Titre + Donnee4(6)\Titre, $FFFF7F, $FF0000)
y + TextHeight(" ")
DrawText(250, Y, Donnee4(1)\Titre + Donnee4(3)\Titre + Donnee4(5)\Titre + Donnee4(7)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste4, 250, Y, 1420, TextHeight(" ")* ListSize(Maliste3()) + TextHeight(" "), Donnee3(0)\Titre, Donnee3(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 0 To ArraySize(Donnee4())
AddGadgetColumn(#Liste4, i, Donnee4(i)\Titre, Donnee4(i)\Largeur)
Next
ForEach Maliste4()
AddGadgetItem(#Liste4, -1, Maliste4())
Next
;}
;{ Disque
YY = Y
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste4) + TextHeight(" ")
CentrerTexteXY(150, 1110, Y, "Disques", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(150, Y, Donnee5(0)\Titre +Donnee5(1)\Titre + Donnee5(2)\Titre + Donnee5(3)\Titre + Donnee5(4)\Titre + Donnee5(5)\Titre + Donnee5(6)\Titre + Donnee5(7)\Titre +
Donnee5(8)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste5, 150, Y, 1110, TextHeight(" ") * ListSize(Maliste5()) + TextHeight(" ") * 2, Donnee5(0)\Titre, Donnee5(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 1 To ArraySize(Donnee5())
AddGadgetColumn(#Liste5, i, Donnee5(i)\Titre, Donnee5(i)\Largeur)
Next
ForEach Maliste5()
AddGadgetItem(#Liste5, -1, Maliste5())
Next
DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)
;}
;{ Bios
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste5) + TextHeight(" ")
CentrerTexte(#Fenetre_principale, Y, "Bios", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(120, Y, Donnee6(0)\Titre +Donnee6(1)\Titre + Donnee6(2)\Titre + Donnee6(3)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste6, 120, Y, 1680, TextHeight(" ") * 2, Donnee5(0)\Titre, Donnee5(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 0 To 3
AddGadgetColumn(#Liste6, i, Donnee6(i)\Titre, Donnee6(i)\Largeur)
Next
AddGadgetItem(#Liste6, -1, Bios_Produit() + #LF$ + Bios_Langage_Courant() + #LF$ + Bios_Fabricant() +#LF$ + Bio_Num_Serie())
DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)
;}
;{ Bus
Y = YY
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste4) + TextHeight(" ")
CentrerTexteXY(1315, 1315+480, Y, "Bus", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(1315, Y, Donnee7(0)\Titre + Donnee7(2)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
DrawText(1315, Y, Donnee7(1)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste7, 1315, Y, 480, TextHeight(" ") * ListSize(Maliste7()) + TextHeight(" ") * 2, Donnee7(0)\Titre, Donnee7(0)\Largeur,#LVS_NOCOLUMNHEADER)
For i = 0 To 2
AddGadgetColumn(#Liste7, i, Donnee7(i)\Titre, Donnee7(i)\Largeur)
Next
ForEach MaListe7()
AddGadgetItem(#Liste7, -1, MaListe7())
Next
DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)
;}
;Mémoire
SetGadgetFont(#Liste1, Police2)
SetGadgetColor(#Liste1, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste1, #PB_Gadget_FrontColor, $F0FF00)
;Carte graphique
SetGadgetFont(#Liste2, Police2)
SetGadgetColor(#Liste2, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste2, #PB_Gadget_FrontColor, $F0FF00)
;Carte mère
SetGadgetFont(#Liste3, Police2)
SetGadgetColor(#Liste3, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste3, #PB_Gadget_FrontColor, $F0FF00)
;Carte de base
SetGadgetFont(#Liste4, Police2)
SetGadgetColor(#Liste4, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste4, #PB_Gadget_FrontColor, $F0FF00)
;Disque
SetGadgetFont(#Liste5, Police2)
SetGadgetColor(#Liste5, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste5, #PB_Gadget_FrontColor, $F0FF00)
;Bios
SetGadgetFont(#Liste6, Police2)
SetGadgetColor(#Liste6, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste6, #PB_Gadget_FrontColor, $F0FF00)
;Bus
SetGadgetFont(#Liste7, Police2)
SetGadgetColor(#Liste7, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste7, #PB_Gadget_FrontColor, $F0FF00)
StopDrawing()
EndProcedure
Principale()
;- gestion des évènements en boucle sans fin
Repeat
Evenement = WindowEvent()
Select Evenement
Case #PB_Event_CloseWindow
action = #Sortie
EndSelect
Until action = #Sortie
;- fermeture de la fenêtre en douceur
CloseWindow(#Fenetre_principale)
End
;- Data Section
DataSection
CLSID_IEnumWbemClassObject:
;1B1CAD8C-2DAB-11D2-B604-00104B703EFD
Data.l $1B1CAD8C
Data.w $2DAB, $11D2
Data.b $B6, $04, $00, $10, $4B, $70, $3E, $FD
IID_IEnumWbemClassObject:
;7C857801-7381-11CF-884D-00AA004B2E24
Data.l $7C857801
Data.w $7381, $11CF
Data.b $88, $4D, $00, $AA, $00, $4B, $2E, $24
CLSID_WbemLocator:
;4590f811-1d3a-11d0-891f-00aa004b2e24
Data.l $4590F811
Data.w $1D3A, $11D0
Data.b $89, $1F, $00, $AA, $00, $4B, $2E, $24
IID_IWbemLocator:
;dc12a687-737f-11cf-884d-00aa004b2e24
Data.l $DC12A687
Data.w $737F, $11CF
Data.b $88, $4D, $00, $AA, $00, $4B, $2E, $24
IID_IUnknown:
;00000000-0000-0000-C000-000000000046
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection