Programme de diagnostic

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Programme de diagnostic

Message par Micoute »

Bonjour à tous, je ne savais pas trop quoi programmer, alors puisque j'ai sur mon disque dur un fichier à inclure traitant les WMI, je me suis dis que ce serait une bonne idée de voir que qu'on peut faire avec, ça m'a donné de bonnes fondations pour y asseoir mon programme, qui ne demande qu'à être amélioré.

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
Dernière modification par Micoute le sam. 30/juil./2016 9:53, modifié 5 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme de diagnostic

Message par falsam »

A part le chapitre mémoire qui m'indique que je n'ai que deux Mo par bank, c'est pas mal du tout :wink:

Bravo Micoute.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Programme de diagnostic

Message par Micoute »

Désolé, mais je suis limité par ma carte mère qui n'accepte que 2 barrettes de 2 Go maxi et je n'ai pas pu pousser plus loin mes investigations, mais j'aimerais bien savoir si il existe une autre méthode pour afficher le total de la mémoire en WMI.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme de diagnostic

Message par falsam »

Le résultat numérique est bon mais tu affiche par exemple 4 Mo au lieu de 4 Go

Tu dois juste faire une toute petite modification de ce code

Code : Tout sélectionner

 With Barrette
    Maliste() = \Banque
    Maliste() + #LF$ + \Capacite + " Mo"
    Maliste() + #LF$ + \Titre
    Maliste() + #LF$ + \LargeurDonnee + " bits"
    Maliste() + #LF$ + \Position
    Maliste() + #LF$ + \Facteur
    Maliste() + #LF$ + \Vitesse + " ns"
    Maliste() + #LF$ + \Tag
  EndWith 
" Go" au lieu de " Mo" peut être ? ^^
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Programme de diagnostic

Message par Micoute »

D'accord !!! Je suis zinzin, je suis zinzin, comme disait le regretté Louis de Funès !

Erreur corrigée dans le post d'origine.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Programme de diagnostic

Message par venom »

Sympa ce code Micoute, bravo 8)






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Programme de diagnostic

Message par Bernie »

Sympas ton code Micoute mais il me manque tout l' affichage du coté droit de la fenetre .
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Programme de diagnostic

Message par Micoute »

Mise à jour dans le premier post.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Programme de diagnostic

Message par Zorro »

il faut aussi tenir compte que tout le monde n'est pas en 1080x1920 .....
(ou il faut prevenir )

je suis en 1366x768 .... je sais c'est batard, mais un prg qui se veux de diagnostique
devrai tenir compte de la resolution ou il est lancé, (librairie Desktop() ) et affichage relatif

ou bien marcher sur du 1024x768 qui est un standard ...
(les netBooks mis a part avec leur 1024x600 )

chez moi ça donne :

Image
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Programme de diagnostic

Message par Micoute »

Merci pour le retour, je vais en tenir compte.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre