PureBasic

Forums PureBasic
Nous sommes le Lun 14/Oct/2019 2:55

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: Divers parametres
MessagePosté: Dim 17/Mar/2019 22:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
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 ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Lun 18/Mar/2019 0:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 311
Localisation: France
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 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Lun 18/Mar/2019 0:27 
Hors ligne

Inscription: Lun 22/Oct/2018 19:34
Messages: 38
Localisation: Haisnes (62)
Pour le processeur
Code:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Lun 18/Mar/2019 7:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2185
Localisation: 50200 Coutances
Bonjour SPH,

si ça peut te satisfaire

Code:
;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:
;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:
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Mar 19/Mar/2019 6:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
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 ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Mar 19/Mar/2019 8:55 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1610
Citation:
Je serais interessé par la recuperation du nom de l'ordi...

ComputerName() ...

Trouvé à l'endroit secret: F1

:mrgreen:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Mar 19/Mar/2019 9:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
Marc56 a écrit:
Citation:
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 ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Mar 19/Mar/2019 12:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 311
Localisation: France
Bonjour,

Regarde les commandes suivantes:
Code:
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:
PCNAME$ = GetEnvironmentVariable("COMPUTERNAME") : Debug PCNAME$

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Divers parametres
MessagePosté: Mar 19/Mar/2019 13:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
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 ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye