[resolu] Lecture du registre récalcitrant... des fois

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[resolu] Lecture du registre récalcitrant... des fois

Message par Ar-S »

J'ai adapté une proce existante (je ne sais pus de qui) pour lire dans le registre, je l'ai simplifié pour ne pas avoir à séparer la clé mère (HKLM, HKCU etc) de la suite.

Si dans la majeur partie des cas elle fonctionne, il y a des cas ou elle ne marche pas et je ne comprends vraiment pas pourquoi.
L'exemple ci dessous est parlant.

Code : Tout sélectionner

Procedure.s   GetRegValue(FullKey.s,ValueName.s)
  ; by Ar-S
  Protected.s SubKey, CleMere
  
  If Left(FullKey,17) = "HKEY_CURRENT_USER"
    CleMere = Left(FullKey,17)
    OpenKey = #HKEY_CURRENT_USER
    SubKey = Mid(FullKey,19,Len(FullKey)-18)
    
  ElseIf Left(FullKey,18) = "HKEY_LOCAL_MACHINE"
    CleMere = Left(FullKey,18)
    OpenKey = #HKEY_LOCAL_MACHINE
    SubKey = Mid(FullKey,20,Len(FullKey)-19)
    
  ElseIf Left(FullKey,17) = "HKEY_CLASSES_ROOT"
    CleMere = Left(FullKey,17)
    OpenKey = #HKEY_CLASSES_ROOT
    SubKey = Mid(FullKey,19,Len(FullKey)-18)
    
  ElseIf Left(FullKey,10) = "HKEY_USERS"
    CleMere = Left(FullKey,10)
    OpenKey = #HKEY_USERS
    SubKey = Mid(FullKey,12,Len(FullKey)-11)
    
  ElseIf Left(FullKey,19) = "HKEY_CURRENT_CONFIG"
    CleMere = Left(FullKey,19)
    OpenKey = #HKEY_CURRENT_CONFIG
    SubKey = Mid(FullKey,21,Len(FullKey)-20)
  EndIf

  hKey.l = 0
  KeyValue.s = Space (255)
  DataSize.l = 255
  
  If RegOpenKeyEx_ (OpenKey,SubKey,0, #KEY_READ ,@hKey)
    KeyValue= ""
  Else
    If RegQueryValueEx_ (hKey,ValueName,0,0,@KeyValue,@DataSize)
      KeyValue= ""
    Else
      KeyValue= Left (KeyValue,DataSize-1)
    EndIf
    RegCloseKey_ (hKey)
  EndIf
  
  ProcedureReturn KeyValue
EndProcedure 

; Marche
Key.s = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Debug  "Result : " + GetRegValue(Key, "ProductName")

; Ne marche pas
Key2.s = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winsat"
Debug  "Result : " + GetRegValue(Key2, "PrimaryAdapterString")


Dernière modification par Ar-S le jeu. 20/sept./2012 13:13, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lecture du registre récalcitrant... des fois

Message par SPH »

Result : Windows Vista (TM) Home Premium
Result : Mobile Intel(R) 4 Series Express Chipset Family

!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.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture du registre récalcitrant... des fois

Message par Ar-S »

Je rêve :?
Alors là je ne comprends vraiment plus rien.
Chez moi le result 2 est vide.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture du registre récalcitrant... des fois

Message par Ar-S »

Trouvé !!

Mais alors encore une fois c'est du GRAND n'importe quoi.
Tes résultats m'ont mis la puce à l'oreille vu que tu es en 32bit me semble t il.

J'ai essayé mon logiciel en le compilant en x64, et là miracle, toutes les clés sont lues sans soucis.

Sérieux il ni a pas du bug la dessous ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lecture du registre récalcitrant... des fois

Message par SPH »

Tant mieux que tu ai trouvé ! :P

!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.12LTS- 64 bits
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Lecture du registre récalcitrant... des fois

Message par GallyHC »

Bonjour,

Code : Tout sélectionner

Result : Windows 7 Professional
Result : NVIDIA GeForce GT 440
Donc OK pour moi :)

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture du registre récalcitrant... des fois

Message par Ar-S »

Nan mais sérieux ? tu es en 64bit et la proce marche, or chez moi non... Je deviens fou là 8O 8O .

Tu l'as compilé avec quelles options ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Lecture du registre récalcitrant... des fois

Message par kernadec »

avec xp32 bit
marche pas non plus chez moi


par contre ça marche avec ce code.

Cordialement

Code : Tout sélectionner


; Stuff required by GetSystemFolder ()...
;auteur Hi-Toro  ;http://www.purebasic.fr/english/viewtopic.php?f=5&t=46991&start=19
#CSIDL_SYSTEM = $25

; Returns System folder...

Procedure.s GetSystemFolder ()
  location$ = Space (#MAX_PATH)
  GetSystemDirectory_ (@location$, #MAX_PATH)
  ProcedureReturn location$
EndProcedure

; Windows 9x or NT? Returns #VER_PLATFORM_WIN32_NT (NT, 2000, XP, etc) or #VER_PLATFORM_WIN32_WINDOWS (95, 98)...

Procedure GetWindowsFamily ()
  os.OSVERSIONINFO
  os\dwOSVersionInfoSize = SizeOf (OSVERSIONINFO)
  GetVersionEx_ (@os)
  ProcedureReturn os\dwPlatformId
EndProcedure

; Name of primary video driver...

Procedure.s VideoDriver ()
  
  Select GetWindowsFamily ()
      
    Case #VER_PLATFORM_WIN32_NT
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          firstvid$ = Space (size)
          
          If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
            
            If LCase (Left (firstvid$, 18)) = "\registry\machine\"
              firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
            EndIf
            
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
              
              If  RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
                device$ = Space (size)
                RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, @device$, @size)
                ; Name is now in device$, or ""...
              EndIf
              
              RegCloseKey_ (devkey)
              
            EndIf
            
          EndIf
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
    Case #VER_PLATFORM_WIN32_WINDOWS
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          device$ = Space (size)
          
          RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, @device$, @size)
          
          ; device$ now contains driver name or ""...
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
  EndSelect
  
  ProcedureReturn device$
  
EndProcedure

; Returns primary video memory in bytes (use 'result / 1024 / 1024' for MB)...

Procedure VideoMemory ()
  
  Select GetWindowsFamily ()
      
    Case #VER_PLATFORM_WIN32_NT
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          firstvid$ = Space (size)
          
          If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
            
            If LCase (Left (firstvid$, 18)) = "\registry\machine\"
              firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
            EndIf
            
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
              
              RegQueryValueEx_ (devkey, "HardwareInformation.MemorySize", #Null, #Null, @totalmem, @size)
              
              ; totalmem contains memory size or 0...
              
              RegCloseKey_ (devkey)
              
            EndIf
            
          EndIf
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
    Case #VER_PLATFORM_WIN32_WINDOWS
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\INFO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          firstvid$ = Space (size)
          
          RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, @totalmem, @size)
          
          ; totalmem contains memory size or 0...
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
  EndSelect
  
  ProcedureReturn totalmem
  
EndProcedure

; Returns the actual video driver file name...

Procedure.s VideoDriverDLL ()
  
  Select GetWindowsFamily ()
      
    Case #VER_PLATFORM_WIN32_NT
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          firstvid$ = Space (size)
          
          If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
            
            If LCase (Left (firstvid$, 18)) = "\registry\machine\"
              firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
            EndIf
            
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
              
              If  RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
                device$ = Space (size)
                If RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, @device$, @size) = #ERROR_SUCCESS
                  device$ = GetSystemFolder () + "\" + device$ + ".dll"
                EndIf
              EndIf
              
              RegCloseKey_ (devkey)
              
            EndIf
            
          EndIf
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
    Case #VER_PLATFORM_WIN32_WINDOWS
      
      If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\DEFAULT", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
        
        If  RegQueryValueEx_ (vidkey, "drv", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
          
          device$ = Space (size)
          
          RegQueryValueEx_ (vidkey, "drv", #Null, #Null, @device$, @size)
          
          device$ = GetSystemFolder () + "\" + device$
          
          ; device$ now contains driver name or ""...
          
        EndIf
        
        RegCloseKey_ (vidkey)
        
      EndIf
      
  EndSelect
  
  ProcedureReturn device$
  
EndProcedure

; Gets file version info. I've forgotten whose code this is -- it's not mine! Please let me know...

Procedure.s GetVersionInfo (file$, getinfo$)
  
  ;     getinfo$ = "FileDescription"
  ;     getinfo$ = "ProductVersion"
  ;     getinfo$ = "ProductName"
  ;     getinfo$ = "CompanyName"
  ;     getinfo$ = "LegalCopyright"
  ;     getinfo$ = "Comments"
  ;     getinfo$ = "FileVersion"
  ;     getinfo$ = "InternalName"
  ;     getinfo$ = "LegalTrademarks"
  ;     getinfo$ = "PrivateBuild"
  ;     getinfo$ = "SpecialBuild"
  ;     getinfo$ = "Language"
  
  info$=""
  
  If FileSize (file$) > 0
    
    zero = 10
    
    If OpenLibrary (1, "version.dll")
      
      length = CallFunction (1, "GetFileVersionInfoSizeA", @file$, @zero) 
      
      If length
        
        mem1 = AllocateMemory (length)
        
        If mem1
          
          result = CallFunction (1, "GetFileVersionInfoA", @file$, 0, length, mem1) 
          
          If result
            
            infobuffer = 0
            infolen = 0
            
            getinfo$ = "\\StringFileInfo\\040904B0\\" + getinfo$
            result = CallFunction (1, "VerQueryValueA", mem1, @getinfo$, @infobuffer, @infolen)
            
            If result
              info$ = PeekS (infobuffer)
            EndIf
            
          EndIf
          
          FreeMemory (mem1)
          
        EndIf
        
      EndIf
      
      CloseLibrary (1)
      
    EndIf
    
  EndIf  
  
  ProcedureReturn info$
  
EndProcedure

; -----------------------------------------------------------------------------
; D E M O . . .
; -----------------------------------------------------------------------------

; Get manufacturer name from video driver DLL...

manufacturer$ = GetVersionInfo (VideoDriverDLL (), "CompanyName")
If manufacturer$ = ""
  manufacturer$ = "[Not found]"
EndIf

info$ = "Manufacturer: " + manufacturer$ + Chr (10) + Chr (10)

; Get video driver name (generally graphics card name)...

video$ = VideoDriver ()
If video$ = ""
  video$ = "[Not found]"
EndIf

info$ = info$ + "Name: " + video$ + Chr (10)

; Get graphics memory...

memory = VideoMemory () / 1024 / 1024
If memory
  mem$ = Str (memory) + " MB"
Else
  mem$ = "[Not found]"
EndIf

info$ = info$ + "Video memory: " + mem$ + Chr (10) + Chr (10)

; Get name of video driver file...

videodll$ = VideoDriverDLL ()
If videodll$ = ""
  videodll$ = "[Not found]"
EndIf

info$ = info$ + "Driver DLL: " + videodll$ + Chr (10)

; Get version number of video driver...

videoversion$ = GetVersionInfo (VideoDriverDLL (), "FileVersion")
If videoversion$ = ""
  videoversion$ = "[Not found]"
EndIf

info$ = info$ + "Driver version: " + videoversion$

; Boing!

MessageRequester ("Main video driver information", info$, #MB_ICONINFORMATION)


Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecture du registre récalcitrant... des fois

Message par Backup »

hum

en 32 bits le registre c'est acces direct ...

en 64 bits le registre est dans le dossier Wow64
regarde la librairie Doopy lib , qui contient les fonctions pour lire le Wow64 ;)
Description : Set Registry access mode

Ex Use Extended Registry Functions
#False (Default) use old Registry functions
True : Use 'New' Registry Functions (Some key cannot be viewed as simple user)

Wow64 Access an Alternate Registry View
By default, a 32-bit application running on WOW64 accesses the 32-bit registry view and a 64-bit application accesses the 64-bit registry view.
The following flags enable 32-bit applications to access redirected keys in the 64-bit registry view and 64-bit applications to access redirected keys in the 32-bit registry view.
These flags have no effect on shared registry keys.
#KEY_WOW64_64KEY Access a 64-bit key from either a 32-bit or 64-bit application. (RegEx(#True) required)
#KEY_WOW64_32KEY Access a 32-bit key from either a 32-bit or 64-bit application.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Lecture du registre récalcitrant... des fois

Message par GallyHC »

Pour ma config :

PC Compaq en 32 bits, j'ai changer la carte video (voir plus haut maintenant), à l'origine c'été une ATI je ne sais plus laquel.
Avant ct un Windows 7 Home, maintenant Windows 7 Pro (acheter en original depuis le depart).
4Go memoires.
2 disque dur.

Quoi dire de plus ? a toi de me dire,

Cordialement,
GallyHC

PS: pour moi ce n'été que la date du BIOS qui me posé probléme.
Dernière modification par GallyHC le lun. 17/sept./2012 16:53, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture du registre récalcitrant... des fois

Message par Ar-S »

@GallyHC
Ah ok ça me rassure que tu sois en 32bit.

@tous

Je suis passé par les WMI pour y arriver. ça devrait être multi windows..

J'ai commenté la procédure Unicode2Ansi(mem)
Libre à vous de la dé-commenter si besoin.

Code : Tout sélectionner

; Author: DataMiner (updated for PB 4.00 by Andre)
; German forum: http://www.purebasic.fr/german/viewtopic.php?t=2477&start=20
; Date: 10. April 2005
; OS: Windows
; Demo: No

; (updated for PB 4.61 by Ar-S - 2012)
; 


;- KONSTANTEN  STRUKTUREN  PROZEDUREN 
#COINIT_MULTITHREAD=0 
#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 
#WBEM_S_NO_ERROR = 0 
#wbemFlagReturnImmediately=16 
#wbemFlagForwardOnly=32 
#IFlags = #wbemFlagReturnImmediately + #wbemFlagForwardOnly 
#WBEM_INFINITE=$FFFFFFFF 


Procedure.l ansi2bstr(ansi.s) 
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0) 
  Dim unicode.w(size) 
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size) 
  ProcedureReturn SysAllocString_(@unicode()) 
EndProcedure 

; Procedure.s Unicode2Ansi(mem) 
  ; ansi.s="" 
  ; Repeat 
    ; a=PeekW(mem) 
    ; ansi=ansi+Chr(a) 
    ; mem+2 
  ; Until a=0 
  ; ProcedureReturn ansi 
; EndProcedure 

Procedure bstr2string (bstr) 
  Shared Result.s 
  Result.s = "" 
  pos=bstr 
  While PeekW (pos) 
    Result=Result+Chr(PeekW(pos)) 
    pos=pos+2 
  Wend 
  ProcedureReturn @Result 
EndProcedure 


Procedure.s GetVideoController()
  
  ;- WMI 
  
  ; --- Step 1: Initialize COM parameters with a call to CoInitializeEx 
  CoInitializeEx_(0,#COINIT_MULTITHREAD) 
  
  ; --- 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): Goto cleanup: 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): Goto cleanup: EndIf  
  
  ; --- Step 4: Obtain a pointer to IWbemServices for the root\cimv2 namespace on the local computer by calling IWbemLocator::ConnectServer. 
  
  hres=loc\ConnectServer(ansi2bstr("root\cimv2"),0,0,0,0,0,0,@svc.IWbemServices) 
  If hres <> 0: MessageRequester("ERROR", "unable to call IWbemLocator::ConnectServer", #MB_OK): Goto cleanup: EndIf  
  hres=svc\queryinterface(?IID_IUnknown,@pUnk.IUnknown) 
  
  ; --- Step 5: Set IWbemServices proxy security so the WMI service can impersonate the client by calling CoSetProxyBlanket. 
  
  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): Goto cleanup: 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): Goto cleanup: EndIf  
  pUnk\release() 
  
  hres=svc\ExecQuery(ansi2bstr("WQL"),ansi2bstr("SELECT * FROM Win32_VideoController"), #IFlags,0,@pEnumerator.IEnumWbemClassObject) 
  If hres <> 0: MessageRequester("ERROR", "unable to call IWbemServices::ExecQuery", #MB_OK): Goto cleanup: EndIf  
  
  mem=AllocateMemory(1000) 
  hres=pEnumerator\reset() 
  

  hres=pEnumerator\Next(#WBEM_INFINITE, 1, @pclsObj.IWbemClassObject, @uReturn) 
  hres=pclsObj\get(ansi2bstr("Name"), 0, mem, 0, 0) 
  
  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 uReturn <> 0
    GPU.s = "Processeur Graphique : " + val
  EndIf 


; --- Step 8: Cleanup 
cleanup: 
svc\release() 
loc\release() 
pEnumerator\release() 
pclsObj\release() 
CoUninitialize_() 

ProcedureReturn GPU
EndProcedure


Debug GetVideoController()


;- DATA 
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 
  IID_IWbemRefresher: 
  ;49353c99-516b-11d1-aea6-00c04fb68820 
  Data.l $49353C99 
  Data.w $516B, $11D1 
  Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20 
  CLSID_WbemRefresher: 
  ;c71566f2-561E-11D1-AD87-00C04FD8FDFF 
  Data.l $C71566F2 
  Data.w $561E, $11D1 
  Data.b $AD,$87,$00,$C0,$4F,$D8,$FD,$FF 
  IID_IWbemConfigureRefresher: 
  ;49353c92-516b-11d1-aea6-00c04fb68820 
  Data.l $49353C92 
  Data.w $516B, $11D1 
  Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20 
  IID_IWbemObjectAccess: 
  ;49353c9a-516b-11d1-aea6-00c04fb68820 
  Data.l $49353C9A 
  Data.w $516B, $11D1 
  Data.b $AE, $A6, $00, $C0, $4F, $B6, $88, $20 
  
EndDataSection 

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lecture du registre récalcitrant... des fois

Message par SPH »

Processeur Graphique : Mobile Intel(R) 4 Series Express Chipset Family

!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.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture du registre récalcitrant... des fois

Message par Ar-S »

Yes :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecture du registre récalcitrant... des fois

Message par Backup »

Seven 64 bits :
Processeur Graphique : NVIDIA GeForce GTX 570M
c'est exacte :)
Répondre