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).