Divers parametres

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Divers parametres

Message par SPH »

Salut, 8)

je cherche des instructions ou une routine qui permettent d'afficher les parametres de l'ordinateur sur lekel le programme cour.
Exemple : type de carte mere, le proc, le nom de l'ordi, etc...
Je prend tout; meme les parametres les plus farfelus :idea:

Thx :wink:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Divers parametres

Message par cage »

Pour une première réponse je dirais

PB --> GetEnvironmentVariable(Name$)

wmi/wmic en batch

PowerShell (Get-WmiObject)

mais tout dépend de ce que tu cherches a faire.

autrement tu tapes msinfo32.exe et tu as tout ce que tu veux.
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Christophe
Messages : 43
Inscription : lun. 22/oct./2018 19:34
Localisation : Haisnes (62)

Re: Divers parametres

Message par Christophe »

Pour le processeur

Code : Tout sélectionner

 Define SI.SYSTEM_INFO
  GetSystemInfo_ (@SI)
  Debug "Nbr de Processeur  :"+SI\dwNumberOfProcessors
  
  Select SI\dwProcessorType
    Case 386
      Debug "Processeur Intel 386"
    Case 486
      Debug "Processeur Intel 486"
    Case 586
      Debug "Processeur Intel Pentium"
    Case 2200
      Debug "Processeur Intel IA64"
    Case 8664
      Debug "Processeur AMD x86 64"
  EndSelect
  
  Select SI\wProcessorArchitecture
    Case 9
      Debug "Architecture x64 (AMD or Intel)"
    Case 5
      Debug "Architecture ARM"
    Case 12
      Debug "Architecture ARM64"
    Case 6
      Debug "Architecture Intel Itanium-based"
    Case 0
      Debug "Architecture x86"
    Case $ffff
      Debug "Architecture inconnue"
  EndSelect
  
  ProgramID = RunProgram("Cmd", "/C WMIC CPU Get Name", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)

If ProgramID
  While ProgramRunning(ProgramID)
    If AvailableProgramOutput(ProgramID)
      Output$ + ReadProgramString(ProgramID)
    EndIf
  Wend

  CloseProgram(ProgramID)

  If Trim(Output$) <> ""
    Debug Output$
  EndIf
EndIf
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Divers parametres

Message par Micoute »

Bonjour SPH,

si ça peut te satisfaire

Code : Tout sélectionner

;WMIQuery Version 1.00
;
;Pure Basic 4.51, 4.61, 5.00 Beta
;
;Contributor : Andre (2004), DataMiner (2005) ..... others who have tried :)
;Update      : falsam (19.09.2012) 
;
;Add
;Procedure WMIQuery(WMIReqSql.s, Map WMIMap.s())
;Run a WMI query and retrieve one or all properties of a class in a map
;
;Example
;NewList WMIResult.WMIClass()

;If WMIQuery("Select Manufacturer, Model, SystemType from Win32_ComputerSystem", WMIResult())
;  ForEach WMIResult()
;    Debug WMIResult()\Property + "=" + WMIResult()\Value
;  Next
;EndIf

;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

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

;- 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

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
  #Liste_Memoire
  #Liste_Graphique
  #Liste_Mere
  #Liste_Base
  #Liste_Disque
  #Liste_Bios
  #Liste_Bus
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
  NumeroBus.i
  TypeBus.s
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_Memoire.s(), NewList Memoire.MemoirePhysique(), Dim Donnee_Memoire.Liste(7)
Global.Memoire Barrette
;Carte graphique
Global NewList MaListe_Graphique.s(), NewList Appareil.Video(), NewList Carte.Graphique(), Dim Donnee_Graphique.Liste(4)
Global.Graphique Carte2
;Carte mère
Global.s NewList MaListe_Mere.s(), NewList MaListe_Base(), NewList CarteMere.Carte_Mere(), NewList CarteBase.Mere_Base(), Dim Donnee_Mere.liste(6), Dim Donnee_Base.liste(7)
Global Carte3.Carte_Mere, Carte4.Mere_Base
;Disque
Global.Disque LeDisque
Global.s NewList MaListe_Disque(), NewList Disque.Logique()
Global.Liste Dim Donnee_Disque(8)
Global TypeDisque.s, valeur.s, valeur2.s, valeur3.s, Capacite.q, Occupe.q
;Bios
Global$ NewList MaListe_Bios(), NewList Produit.Bios(), Dim Donnee_Bios.Liste(3)
;Bus
Global$ NewList MaListe_Bus.Bus(), NewList Data_Bus.Bus_Win32(), Dim Donnee_Bus.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_Memoire())
  
  With Barrette
    Maliste_Memoire() = \Banque
    Maliste_Memoire() + #LF$ + \Capacite + " Go"
    Maliste_Memoire() + #LF$ + \Titre
    Maliste_Memoire() + #LF$ + \LargeurDonnee + " bits"
    Maliste_Memoire() + #LF$ + \Position
    Maliste_Memoire() + #LF$ + \Facteur
    Maliste_Memoire() + #LF$ + \Vitesse + " ns"
    Maliste_Memoire() + #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(MaListe_Graphique())
  
  With Carte2
    MaListe_Graphique() = \Nom
    MaListe_Graphique() + #LF$ + \Frequence + " Hz"
    MaListe_Graphique() + #LF$ + \Dpi + " ppp"
    MaListe_Graphique() + #LF$ + \Hauteur + " px"
    MaListe_Graphique() + #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

ForEach CarteBase()
  With Carte4
    \Availability = Disponibilite_Base()
    \Caption = CarteBase()\Caption
    \Description = CarteBase()\Description
    \DeviceID = CarteBase()\DeviceID
    \Name = CarteBase()\Name
    \PrimaryBusType = CarteBase()\PrimaryBusType
    \SecondaryBusType = CarteBase()\SecondaryBusType
    \SystemName = CarteBase()\SystemName
  EndWith
  
  AddElement(MaListe_Base())
  With Carte4
    MaListe_Base() = \Availability
    MaListe_Base() + #LF$ + \Caption
    MaListe_Base() + #LF$ + \Description
    MaListe_Base() + #LF$ + \DeviceID
    MaListe_Base() + #LF$ + \Name
    MaListe_Base() + #LF$ + \PrimaryBusType
    MaListe_Base() + #LF$ + \SecondaryBusType
    MaListe_Base() + #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
ForEach CarteMere()
AddElement(MaListe_Mere())
With Carte3
  MaListe_Mere() = CarteBase()\Caption
  MaListe_Mere() + #LF$ + CarteMere()\Manufacturer
  MaListe_Mere() + #LF$ + CarteMere()\Product
  MaListe_Mere() + #LF$ + CarteMere()\SerialNumber
  MaListe_Mere() + #LF$ + CarteMere()\Status
  MaListe_Mere() + #LF$ + CarteMere()\Tag
  MaListe_Mere() + #LF$ + CarteMere()\Version
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(MaListe_Disque())
    
    With LeDisque
      MaListe_Disque() = \Lecteur
      MaListe_Disque() + #LF$ + \Nom
      MaListe_Disque() + #LF$ + \Systeme
      MaListe_Disque() + #LF$ + \NumeroSerie
      MaListe_Disque() + #LF$ + \Type
      MaListe_Disque() + #LF$ + \Capacite
      MaListe_Disque() + #LF$ + \EspaceLibre
      MaListe_Disque() + #LF$ + \EspaceOccupe
      MaListe_Disque() + #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

AddElement(MaListe_Bios())
MaListe_Bios() = Produit()\Caption + #LF$ + Produit()\CurrentLanguage + #LF$ + Produit()\Manufacturer + #LF$ + Produit()\SerialNumber
;}
;{ 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"
        Data_Bus()\BusType = Val(WMIResult()\Value)
      Case "Caption"
        Data_Bus()\Caption = WMIResult()\Value
    EndSelect
  Next  
EndIf

Procedure.s TitreBus()
  ProcedureReturn Data_Bus()\Caption
EndProcedure  

Procedure NumeroBus()      
  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 = NumeroBus()
    \BusType = Val(TypeBus())
    \Caption = TitreBus()
  EndWith
Next

ForEach Data_Bus()
  AddElement(MaListe_Bus())
  
  With MesBus
    MaListe_Bus()\TitreBus = TitreBus()
    MaListe_Bus()\NumeroBus = NumeroBus()
    MaListe_Bus()\TypeBus = TypeBus()
  EndWith    
Next
;}
;{ Données
;Mémoire
Donnee_Memoire(0)\Titre = "Banque "
Donnee_Memoire(0)\Largeur = 100
Donnee_Memoire(1)\Titre = "Capacité"
Donnee_Memoire(1)\Largeur = 110
Donnee_Memoire(2)\Titre = "Type de mémoire  "
Donnee_Memoire(2)\Largeur = 220
Donnee_Memoire(3)\Titre = "Larg données"
Donnee_Memoire(3)\Largeur = 150
Donnee_Memoire(4)\Titre = "Emplacement"
Donnee_Memoire(4)\Largeur = 200
Donnee_Memoire(5)\Titre =  "Facteur forme"
Donnee_Memoire(5)\Largeur = 150
Donnee_Memoire(6)\Titre = "Vitesse    "
Donnee_Memoire(6)\Largeur = 100
Donnee_Memoire(7)\Titre = "Tag          "
Donnee_Memoire(7)\Largeur = 200

;Carte graphique
Donnee_Graphique(0)\Titre = "Nom                  "
Donnee_Graphique(0)\Largeur = 250
Donnee_Graphique(1)\Titre = "Fréquence   "
Donnee_Graphique(1)\Largeur = 120
Donnee_Graphique(2)\Titre = "DPI     "
Donnee_Graphique(2)\Largeur = 120
Donnee_Graphique(3)\Titre = "Hauteur"
Donnee_Graphique(3)\Largeur = 120
Donnee_Graphique(4)\Titre = "Largeur     "
Donnee_Graphique(4)\Largeur = 85

;Carte mère
Donnee_Mere(0)\Titre = "Type carte           "
Donnee_Mere(0)\Largeur = 200
Donnee_Mere(1)\Titre = "Fabricant                     "
Donnee_Mere(1)\Largeur = 300
Donnee_Mere(2)\Titre = "Produit                  "
Donnee_Mere(2)\Largeur = 250
Donnee_Mere(3)\Titre = "N° de série       "
Donnee_Mere(3)\Largeur = 200
Donnee_Mere(4)\Titre ="Statut      "
Donnee_Mere(4)\Largeur = 100
Donnee_Mere(5)\Titre = "Balise             "
Donnee_Mere(5)\Largeur = 120
Donnee_Mere(6)\Titre = "Version     "
Donnee_Mere(6)\Largeur = 150

;Carte de base
Donnee_Base(0)\Titre ="          Disponibilité                   "
Donnee_Base(0)\Largeur = 410
Donnee_Base(1)\Titre = "                                          Libellé     "
Donnee_Base(1)\Largeur = 120
Donnee_Base(2)\Titre = "            Description             "
Donnee_Base(2)\Largeur = 120
Donnee_Base(3)\Titre = "            ID_Base            "
Donnee_Base(3)\Largeur = 125
Donnee_Base(4)\Titre = "Nom             "
Donnee_Base(4)\Largeur = 120
Donnee_Base(5)\Titre = "Bus Primaire          "
Donnee_Base(5)\Largeur = 80
Donnee_Base(6)\Titre = "Bus Secondaire                "
Donnee_Base(6)\Largeur = 80
Donnee_Base(7)\Titre = "Nom Système      "
Donnee_Base(7)\Largeur = 120

Donnee_Disque(0)\Titre = "ID  "
Donnee_Disque(0)\Largeur = 30
Donnee_Disque(1)\Titre = "Nom du volume     "
Donnee_Disque(1)\Largeur = 200
Donnee_Disque(2)\Titre = "Système  "
Donnee_Disque(2)\Largeur = 70
Donnee_Disque(3)\Titre = "N° série  "
Donnee_Disque(3)\Largeur = 100
Donnee_Disque(4)\Titre = "Description          "
Donnee_Disque(4)\Largeur = 210
Donnee_Disque(5)\Titre =  "Capacité     "
Donnee_Disque(5)\Largeur = 130
Donnee_Disque(6)\Titre = "Libre        "
Donnee_Disque(6)\Largeur = 130
Donnee_Disque(7)\Titre = "Occupé       "
Donnee_Disque(7)\Largeur = 130
Donnee_Disque(8)\Titre = "% occupé  "
Donnee_Disque(8)\Largeur = 100

Donnee_Bios(0)\Titre = "Produit                                         "
Donnee_Bios(0)\Largeur = 450
Donnee_Bios(1)\Titre = "Langage courant                                 "
Donnee_Bios(1)\Largeur = 300
Donnee_Bios(2)\Titre = "Fabricant                                       "
Donnee_Bios(2)\Largeur = 300
Donnee_Bios(3)\Titre = "N° de série          "
Donnee_Bios(3)\Largeur = 230

Donnee_Bus(0)\Titre = "Description    "
Donnee_Bus(0)\Largeur = 80
Donnee_Bus(1)\Titre = "    Numéro de bus                               "
Donnee_Bus(1)\Largeur = 80
Donnee_Bus(2)\Titre = "         Type de bus             "
Donnee_Bus(2)\Largeur = 235
;}
Procedure Principale()
OpenWindow(#Fenetre_principale, 0, 0, Largeur, Hauteur, "Diagnotic WMI.pb", 
           #PB_Window_SystemMenu|#PB_Window_Maximize)
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(" ")
DrawText(10,Y,"Mémoire",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, " "+Donnee_Memoire(0)\Titre + " " + Donnee_Memoire(1)\Titre + "     " + Donnee_Memoire(2)\Titre + " " + Donnee_Memoire(3)\Titre + "     " + 
                 Donnee_Memoire(4)\Titre +"       " +Donnee_Memoire(5)\Titre + "      " + Donnee_Memoire(6)\Titre + "        " + Donnee_Memoire(7)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste_Memoire, 10, Y, 1260, TextHeight(" ") * ListSize(Maliste_Memoire()) + TextHeight(" "), Donnee_Memoire(0)\Titre, Donnee_Memoire(0)\Largeur,#LVS_NOCOLUMNHEADER)

For i = 1 To ArraySize(Donnee_Memoire())
  AddGadgetColumn(#Liste_Memoire, i, Donnee_Memoire(i)\Titre, Donnee_Memoire(i)\Largeur)
Next

ForEach Maliste_Memoire()
  AddGadgetItem(#Liste_Memoire, -1, Maliste_Memoire())
Next
;}
;{ Liste Carte graphique
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste_Memoire) + TextHeight(" ")
DrawText(10,Y,"Carte vidéo",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, " "+Donnee_Graphique(0)\Titre + " " + Donnee_Graphique(1)\Titre + "     " + Donnee_Graphique(2)\Titre + " " + Donnee_Graphique(3)\Titre + "     " + Donnee_Graphique(4)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste_Graphique, 10, Y, 730, TextHeight(" ")* ListSize(MaListe_Graphique()) + TextHeight(" "), Donnee_Graphique(0)\Titre, Donnee_Graphique(0)\Largeur,#LVS_NOCOLUMNHEADER)

For i = 1 To ArraySize(Donnee_Graphique())
  AddGadgetColumn(#Liste_Graphique, i, Donnee_Graphique(i)\Titre, Donnee_Graphique(i)\Largeur)
Next

ForEach MaListe_Graphique()
  AddGadgetItem(#Liste_Graphique, -1, MaListe_Graphique())
Next
;}
;{ Liste Carte mère
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste_Graphique) + TextHeight(" ") + 10

DrawText(10,Y,"Carte mère",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, Donnee_Mere(0)\Titre + Donnee_Mere(1)\Titre + Donnee_Mere(2)\Titre + Donnee_Mere(3)\Titre + Donnee_Mere(4)\Titre + Donnee_Mere(5)\Titre + Donnee_Mere(6)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste_Mere, 10, Y, 1370, TextHeight(" ") * ListSize(MaListe_Mere()) + TextHeight(" "), Donnee_Mere(0)\Titre, Donnee_Mere(0)\Largeur,#LVS_NOCOLUMNHEADER)

For i = 1 To ArraySize(Donnee_Mere())
  AddGadgetColumn(#Liste_Mere, i, Donnee_Mere(i)\Titre, Donnee_Mere(i)\Largeur)
Next

ForEach MaListe_Mere()
  AddGadgetItem(#Liste_Mere, -1, MaListe_Mere())
Next
;}
;{ Liste Carte de base
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste_Mere) + TextHeight(" ")
DrawText(10,Y,"Carte de base",$FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, Donnee_Base(0)\Titre + Donnee_Base(2)\Titre + Donnee_Base(4)\Titre + Donnee_Base(6)\Titre, $FFFF7F, $FF0000)
y + TextHeight(" ")
DrawText(10, Y, Donnee_Base(1)\Titre + Donnee_Base(3)\Titre + Donnee_Base(5)\Titre + Donnee_Base(7)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
;ListIconGadget(#Liste_Base, 250, Y, 1590, TextHeight(" ")* ListSize(MaListe_Base())  + TextHeight(" "), Donnee_Base(0)\Titre, Donnee_Base(0)\Largeur,#LVS_NOCOLUMNHEADER)
ListIconGadget(#Liste_Base, 0, Y, 0, TextHeight(" "), "", 1,#LVS_NOCOLUMNHEADER)
;For i = 0 To ArraySize(Donnee_Base())
;  AddGadgetColumn(#Liste_Base, i, Donnee_Base(i)\Titre, Donnee_Base(i)\Largeur)
;Next

;ForEach MaListe_Base()
;  AddGadgetItem(#Liste_Base, -1, MaListe_Base())
;Next
DrawText(10, Y, Disponibilite_Base() + "  " + CarteBase()\Caption + "  " + CarteBase()\Description + "  " + CarteBase()\DeviceID + "  " +
                 CarteBase()\Name + " " + CarteBase()\PrimaryBusType + "      " + CarteBase()\SecondaryBusType + "      " + CarteBase()\SystemName, $F0FF00, CoulFond)
;}
;{ Disque
YY = Y
DrawingMode(#PB_2DDrawing_Transparent)
Y + GadgetHeight(#Liste_Base) + TextHeight(" ")
DrawText(10, Y, "Disques", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, Donnee_Disque(0)\Titre +Donnee_Disque(1)\Titre + Donnee_Disque(2)\Titre + Donnee_Disque(3)\Titre + Donnee_Disque(4)\Titre + Donnee_Disque(5)\Titre + Donnee_Disque(6)\Titre + Donnee_Disque(7)\Titre + 
                 Donnee_Disque(8)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste_Disque, 10, Y, 1110, TextHeight(" ") * ListSize(MaListe_Disque()) + TextHeight(" ") * 2, Donnee_Disque(0)\Titre, Donnee_Disque(0)\Largeur,#LVS_NOCOLUMNHEADER)

For i = 1 To ArraySize(Donnee_Disque())
  AddGadgetColumn(#Liste_Disque, i, Donnee_Disque(i)\Titre, Donnee_Disque(i)\Largeur)
Next

ForEach MaListe_Disque()
  AddGadgetItem(#Liste_Disque, -1, MaListe_Disque())
Next

DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)

;}
;{ Bus
Y = 0
YY = Y
DrawingMode(#PB_2DDrawing_Transparent)
Y + TextHeight(" ")
DrawText(1315, Y, "Bus", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(1315, Y, Donnee_Bus(0)\Titre + Donnee_Bus(2)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
DrawText(1315, Y, Donnee_Bus(1)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ")
ListIconGadget(#Liste_Bus, 1315, Y, 485, TextHeight(" ") * ListSize(MaListe_Bus()) + TextHeight(" ") * 2.1, Donnee_Bus(0)\Titre, Donnee_Bus(0)\Largeur,#LVS_NOCOLUMNHEADER)

For i = 0 To 2
  AddGadgetColumn(#Liste_Bus, i, Donnee_Bus(i)\Titre, Donnee_Bus(i)\Largeur)
Next

;SortStructuredList(MaListe_Bus(), #PB_Sort_Ascending, OffsetOf(Bus\NumeroBus), TypeOf(Bus\NumeroBus))

ForEach MaListe_Bus()
  AddGadgetItem(#Liste_Bus, -1, MaListe_Bus()\TitreBus + #LF$ + MaListe_Bus()\NumeroBus + #LF$ + MaListe_Bus()\TypeBus)
Next  


DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)
;}
;{ Bios
DrawingMode(#PB_2DDrawing_Transparent)
Y = 730
DrawText(10, Y, "Bios", $FFFF7F)
Y + TextHeight(" ")
DrawingMode(#PB_2DDrawing_Default)
Y + TextHeight(" ")
DrawText(10, Y, Donnee_Bios(0)\Titre +Donnee_Bios(1)\Titre + Donnee_Bios(2)\Titre + Donnee_Bios(3)\Titre, $FFFF7F, $FF0000)
Y + TextHeight(" ") 
DrawText(10, Y, Produit()\Caption + Space(6) + Produit()\CurrentLanguage + Space(32) + Produit()\Manufacturer + Space(23) + Produit()\SerialNumber, $F0FF00, CoulFond)

DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Transparent)
;}
;Mémoire
SetGadgetFont(#Liste_Memoire, Police2)
SetGadgetColor(#Liste_Memoire, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Memoire, #PB_Gadget_FrontColor, $F0FF00)

;Carte graphique
SetGadgetFont(#Liste_Graphique, Police2)
SetGadgetColor(#Liste_Graphique, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Graphique, #PB_Gadget_FrontColor, $F0FF00)

;Carte mère
SetGadgetFont(#Liste_Mere, Police2)
SetGadgetColor(#Liste_Mere, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Mere, #PB_Gadget_FrontColor, $F0FF00)

;Carte de base
SetGadgetFont(#Liste_Base, Police2)
SetGadgetColor(#Liste_Base, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Base, #PB_Gadget_FrontColor, $F0FF00)

;Disque
SetGadgetFont(#Liste_Disque, Police2)
SetGadgetColor(#Liste_Disque, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Disque, #PB_Gadget_FrontColor, $F0FF00)

;Bios
SetGadgetFont(#Liste_Bios, Police2)
;SetGadgetColor(#Liste_Bios, #PB_Gadget_BackColor, CoulFond)
;SetGadgetColor(#Liste_Bios, #PB_Gadget_FrontColor, $F0FF00)

;Bus
SetGadgetFont(#Liste_Bus, Police2)
SetGadgetColor(#Liste_Bus, #PB_Gadget_BackColor, CoulFond)
SetGadgetColor(#Liste_Bus, #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

Code : Tout sélectionner

IncludeFile "D:\Programmation\Prg Perso\Include\WMIQuery.pbi"

Structure Processeur
  ;AddressWidth.i
  ;Architecture.i
  ;AssetTag.s
  ;Availability.i
  Caption.s
  ;Characteristics.i
  ;ConfigManagerErrorCode.i
  ;ConfigManagerUserConfig.b
  ;CpuStatus.i
  ;CreationClassName.s
  CurrentClockSpeed.i
  CurrentVoltage.i
  ;DataWidth.i
  Description.s
  ;DeviceID.s
  ;ErrorCleared.b
  ;ErrorDescription.s
  ;ExtClock.i
  ;Family.i
  ;InstallDate.i
  ;L2CacheSize.i
  ;L2CacheSpeed.i
  ;L3CacheSize.i
  ;L3CacheSpeed.i
  ;LastErrorCode.i
  ;Level.i
  LoadPercentage.i
  Manufacturer.s
  ;MaxClockSpeed.i
  Name.s
  NumberOfCores.i
  NumberOfEnabledCore.i
  ;NumberOfLogicalProcessors.i
  ;OtherFamilyDescription.s
  ;PartNumber.s
  ;PNPDeviceID.s
  ;ProcessorId.s
  ;ProcessorType.i
  ;Revision.i
  ;Role.s
  ;SecondLevelAddressTranslationExtensions.b
  ;SerialNumber.s
  ;SocketDesignation.s
  ;Status.s
  ;StatusInfo.i
  ;Stepping.s
  ;SystemCreationClassName.s
  ;SystemName.s
  ;ThreadCount.i
  ;UniqueId.s
  ;UpgradeMethod.i
  ;Version.s
  ;VirtualizationFirmwareEnabled.b
  ;VMMonitorModeExtensions.b
  ;VoltageCaps.i
EndStructure

Global NewList WMIResult.WMIClass(), NewList Produit.Processeur()

If WMIQuery("Select * from Win32_Processor", WMIResult())
  
  ForEach WMIResult()
    
    ;Debug ""+WMIResult()\Property + " = " + WMIResult()\Value
    
    Select WMIResult()\Property 
        Case "Caption"
          AddElement(Produit())
          Produit()\Caption = WMIResult()\Value
        Case "CurrentClockSpeed"
          Produit()\CurrentClockSpeed = Val(WMIResult()\Value)
        Case "CurrentVoltage"
          Produit()\CurrentVoltage = Val(WMIResult()\Value)
        Case "Description"
          Produit()\Description = WMIResult()\Value + " "
          Case "LoadPercentage"
          Produit()\LoadPercentage = Val(WMIResult()\Value)
        Case "Manufacturer"
          Produit()\Manufacturer = WMIResult()\Value + " "
        Case "Name"
          Produit()\Name = WMIResult()\Value + " "
        Case "NumberOfCores"
          Produit()\NumberOfCores = Val(WMIResult()\Value)
        Case "NumberOfEnabledCore"
          Produit()\NumberOfEnabledCore = Val(WMIResult()\Value)
    EndSelect
    
  Next
  
EndIf

ForEach Produit()
  Debug Produit()\Caption
  Debug "Vitesse courante : " +Produit()\CurrentClockSpeed
  Debug "Tension courante : " +Produit()\CurrentVoltage
  Debug "Description : " + Produit()\Description
  Debug "% charge : " +Produit()\LoadPercentage
  Debug "Fabricant : " +Produit()\Manufacturer
  Debug "Nom : " + Produit()\Name
  Debug "Nbre de coeurs : " + Produit()\NumberOfCores
  Debug "Nbre coeurs actifs : " + Produit()\NumberOfEnabledCore
Next
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
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Divers parametres

Message par SPH »

Je serais interessé par la recuperation du nom de l'ordi... Si vous avez ca, merci bien :idea:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Divers parametres

Message par Marc56 »

Je serais interessé par la recuperation du nom de l'ordi...
ComputerName() ...

Trouvé à l'endroit secret: F1

:mrgreen:
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Divers parametres

Message par SPH »

Marc56 a écrit :
Je serais interessé par la recuperation du nom de l'ordi...
ComputerName() ...

Trouvé à l'endroit secret: F1

:mrgreen:
Je ne suis pas en F1, je suis en peugeot :wink:

Merci 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Divers parametres

Message par cage »

Bonjour,

Regarde les commandes suivantes:

Code : Tout sélectionner

Result$ = GetUserDirectory(Type)
Result$ = GetEnvironmentVariable(Name$)
Pour les variables Environment,
dans une 'Invite de commandes' (WIN+R Ouvrir: cmd.exe),
tape la commande MS-DOS set

Tu obtiendra toutes les variables définies pour ton PC dont COMPUTERNAME=

Une autre manière d'obtenir cette information est par exemple:

Code : Tout sélectionner

PCNAME$ = GetEnvironmentVariable("COMPUTERNAME") : Debug PCNAME$
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Divers parametres

Message par SPH »

Merci a tous :!:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Répondre