draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010
-
20 sept. 2005 à 19:39
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 2018
-
20 sept. 2005 à 23:45
Salut a tous,
Voila j'essai de lire une valeur binaire dans la base de registre,de la stockee en string pour la reecrire apres.
Mon probleme est que je ne parviens pas a redonner la meme valeur :(
Voici mon code (sans les declarations):
'Pour ecrire la valeur
Public Sub SetBinaryValue(Racin As Racine, cle As String, NomValeur As String, Valeur() As Long)
On Error GoTo er
Dim i As Long
Dim bi As Long
For i = 0 To UBound(Valeur) - 1
bi = bi + Len(Valeur(i))
Next i
Dim Pointeur As Long 'pointe sur la clé
Dim Resultat As Long 'résultat
Resultat = RegCreateKeyEx(Racin, cle, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESSb, 0&, Pointeur, Resultat)
Resultat = RegSetValueExLong(Pointeur, NomValeur, 0&, REG_BINARY, Valeur(0), bi)
Resultat = RegCloseKey(Pointeur)
er:
If Err.Description <> "" Then MsgBox Err.Description
End Sub
'Pour la lire
Function GetBinaryValue(ByVal hKey As Long, ByVal KeyName As String, _
ByVal ValueName As String) As Variant
Dim handle As Long
Dim resLong As Long
Dim resString As String
Dim resBinary() As Byte
Dim length As Long
Dim retVal As Long
Dim valueType As Long
Dim tmp As String
If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then
Exit Function
End If
length = 1024
ReDim resBinary(0 To length - 1) As Byte
retVal = RegQueryValueEx(handle, ValueName, 0, valueType, resBinary(0), _
length)
If retVal = ERROR_MORE_DATA Then
ReDim resBinary(0 To length - 1) As Byte
retVal = RegQueryValueEx(handle, ValueName, 0, valueType, resBinary(0), _
length)
End If
Select Case valueType
Case REG_BINARY
If length <> UBound(resBinary) + 1 Then
ReDim Preserve resBinary(0 To length - 1) As Byte
End If
Dim i As Long
For i = 0 To UBound(resBinary) '- 1
tmp = tmp & CStr(resBinary(i)) & "|"
Next i
GetBinaryValue = tmp
Case Else
RegCloseKey handle
End Select
RegCloseKey handle
End Function
pour la cle HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main","Window Placement" par exemple il me renvoi:
("44|0|0|0|0|0|0|0|1|0|0|0|0|131|255|255|0|131|255|255|255|255|255|255|255|255|255|255|0|0|0|0|0|0|0|0|0|4|0|0|226|2|0|0|", "|")
'mais si je split ca et que je veux le reecrire et bin non il veut po me mettre la meme valeur :(
exemple:
Private Sub Command2_Click()
Dim rets() As Long
Dim ss() As String
Dim i As Long
ss = Split("44|0|0|0|0|0|0|0|1|0|0|0|0|131|255|255|0|131|255|255|255|255|255|255|255|255|255|255|0|0|0|0|0|0|0|0|0|4|0|0|226|2|0|0|", "|")
ReDim rets(0 To UBound(ss) - 1)
For i = 0 To UBound(ss) - 1
rets(i) = CLng(ss(i))
Next i
Call SetBinaryValue(HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "ESSAI", rets())
End Sub
Bon j'admets que c'est pas tres clair mon explication, mais je vois pas comment mieux expliquer..
Merci d'avance @+
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 20 sept. 2005 à 22:05
j'ai eu le meme problème que toi lorsque j'avais besoin d'écrire une valeur binaire.
comme toi mes valeurs était dans un tableau de byte
et j'ai galérer pas mal de temps avant de trouver une solution sur google
inverse les cases du tableau de byte que tu dois envoyer à la ta fonction SetBinaryValue !
Je ne sais pas comment tu as écrites ta fonction SetBinaryValue alors je ne sais pas si sa va passer mais essais !
Vous n’avez pas trouvé la réponse que vous recherchez ?