Bug 64 bits mis à part, je tente maintenant de lister les sous-clés de registre.
Une méthode EnumKey est utilisable mais le dernier paramètre doit être un tableau de chaines passé par référence. C'est dans ce dernier que le nom de chaque sous clé doit être stocké.
Mais je ne vois pas du tout comment le déclarer et l'utiliser. Puisqu'on ne sait pas à l'avance combien de clés vont être récupérées, dois-je déclarer le tableau moi même à une taille fixe suffisamment importante ? Pour l'instant toute mes tentatives sont restées infructueuses...
Code : Tout sélectionner
XIncludeFile "COMatePLUS.pbi"
Define.s Hostname, login, password, strKeyPath, strValueName
Define.COMateObject objLocator, objService, objReg
Hostname = "PC-00000"
login = "Administrateur"
password = "password"
hkey = #HKEY_LOCAL_MACHINE
strKeyPath = "SYSTEM\CurrentControlSet\services\NetBT" ;"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player"
strValueName = "NbProvider" ;"InstallLocation"
Dim myArr.s(100)
objLocator = COMate_CreateObject("WbemScripting.SWbemLocator")
If objLocator
objService = objLocator\GetObjectProperty("ConnectServer(" + "'" + Hostname + "', '" + "root\default" + "', '" + login + "', '" + password + "')")
If objService
objReg = objService\GetObjectProperty("Get('StdRegProv')")
If objReg
If objReg\Invoke("EnumKey(" + Str(hkey) + ", '" + strKeyPath + "', " + Str(@myArr) + " BYREF)") = #S_OK
For i = 0 To 100
Debug myArr(i)
Next
Else
Debug "invoke EnumKey error"
Debug COMate_GetLastErrorDescription()
EndIf
; If objReg\Invoke("GetStringValue(" + Str(hkey) + ", '" + strKeyPath + "', '" + strValueName + "', " + Str(@dwValue) + " BYREF)") = #S_OK
; Debug PeekS(dwValue, -1, #PB_Unicode)
; SysFreeString_(dwValue)
; Else
; Debug "invoke error"
; Debug COMate_GetLastErrorDescription()
; EndIf
objReg\Release()
Else
Debug "objReg erreur"
EndIf
objService\Release()
Else
Debug "objService erreur : " + COMate_GetLastErrorDescription()
EndIf
objLocator\Release()
EndIf
PS : Dans cet exemple, on se connecte à une machine distante (sur un lan).