cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012
-
30 juin 2006 à 12:30
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012
-
2 juil. 2006 à 22:36
Bonjour,
J'essaye de récupérer une valeur type Binary et aussi Dword dans le registre mais ce qui est retourné avec la ligne ci-dessous ne correspond pas ?
dim strData as object = Nothing
strData = My.Computer.Registry.LocalMachine.OpenSubKey(NodeText, False).GetValue(strValName, Nothing)
dans le registre j'ai :
ChaineBin REG_BINARY 12 25 55 55 55 55 55 55
et ce que j'obtiens avec strData est un Array de : 18 37 85 85 85 85 85 85
ChaineDw REG_DWORD 0x00000012(18)
et ce que j'obtiens avec strData est une valeur de : 18
que je traite ensuite avec cela :
Public Function AlphaToHex(ByVal strIn As String, ByVal blnLittleEndian As Boolean) As String
Dim strOut As String = ""
Dim intCpt, intAsc As Integer
If blnLittleEndian Then
For intCpt = Len(strIn) To 1 Step -1
intAsc = Asc(Mid(strIn, intCpt, 1))
strOut = strOut & IIf(intAsc < 16, "0" & Hex(intAsc), Hex(intAsc))
Next
Else
For intCpt = 1 To Len(strIn)
intAsc = Asc(Mid(strIn, intCpt, 1))
strOut = strOut & IIf(intAsc < 16, "0" & Hex(intAsc), Hex(intAsc))
Next
End If
Return strOut
End Function
Public Function DecFromBaseX(ByVal strIn As String, ByVal intBase As Integer) As Decimal
Dim intCpt As Short
Dim curOut As Decimal
Try
If intBase > 36 Or intBase < 2 Then
Return CDec("Base hors limite")
Exit Function
End If
strIn = UCase(strIn)
For intCpt = 1 To Len(strIn)
curOut = curOut + DecVal(Mid(strIn, intCpt, 1)) * intBase ^ (Len(strIn) - intCpt)
Next
Return curOut
Catch ex As Exception
Return Err.Number * (-1)
End Try
End Function
Mais lui aussi le résultat obtenu n'est pas identique au registre
obtenu : 0x3831 (14385)
Il marche, c'est juste que j'ai pas mis la valeur de retour en forme comme tu voulais.
Je te redonne le code qui te retourne les bon format:
Dim
ObjValue
As
Object
=
My
.Computer.Registry.LocalMachine.OpenSubKey(NodeText,
False
).GetValue(strValName,
Nothing
)
Dim
strData
As
String
=
String
.Empty
If
ObjValue.GetType()
Is
GetType
(
Byte
())
Then
Dim
StrValue()
As
String
= System.Array.ConvertAll(
CType
(ObjValue,
Byte
()),
New
Converter(
Of
Byte
,
String
)(
AddressOf
ByteToString))
strData =
String
.Join(" "c, StrValue)
ElseIf
ObjValue.GetType()
Is
GetType
(
Integer
)
Then
Dim
Value
As
Integer
=
CType
(ObjValue,
Integer
)
Dim
HexValue
As
String
= System.Convert.ToString(Value, 16)
strData =
"0x"
&
New
String
("0"c, 8 - HexValue.Length) & HexValue
ElseIf
ObjValue.GetType()
Is
GetType
(
String
())
Then
Dim
Value()
As
String
=
CType
(ObjValue,
String
())
strData =
String
.Join(
String
.Empty, Value)
Else
strData =
CType
(ObjValue,
String
)
End
If
System.Windows.Forms.MessageBox.Show(strData)
Avec la fonction qui va avec:
Public
Shared
Function
ByteToString(
ByVal
[Byte]
As
Byte
)
As
String
Return
[Byte].ToString()
End
Function
Mais y'a une turc que je me demande:
Ca te sert à quoi de mettre les valeurs dans ce format qui n'est plus exploitable ?
Et pour les écrire dans le registre, c'est de ce format ?
Kenji
Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012 30 juin 2006 à 22:57
Le résultat de votre code ne retournait pas la bonne valeur ?
donc en mélangent vore code et celui de TroXsa, la lecture fonctionne bien
Reste plusqu'a trouver pour faire l'inverse, ecrire du DWORD ou BINARY dans le registre
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012 1 juil. 2006 à 00:38
Merci
les valeurs sont peut-être plus exploitable, mais mon listview doit refleter l'identique à ce que tu vois dans le registre.
Biensure si modification de ces valeurs il faut pouvoir les re-écrires au bon format dans le registre.
Enfin de compte mon Controle est un mini Regedit.
Claude
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mais pour les écrires tu as:
Pour une REG_BINARY: 12 25 55 55 55 55 55 55
Pour une REG_DWORD: 0x00000012
Comme c'est plus exploitable, comment peut tu reconnaitre ces valeurs ?
Je veux dire: tu as une chaine "12 25 55 55 55 55 55 55", comment peux tu dire si c'est du binary ou tu sz ? Une sz peut trés bien avoir cette valeur ! Idem pour "0x00000012".
Donc a mon avis, si tu veux faire un MiniRegedit, il faut que tu conserve les valeur que tu as au départ à savoir un tableau de Byte pour une BINARY, un integer piur une DWORD, un tableau de string pour une MULTI_SZ ..., et c'est quand tu les affiches que tu les transforme (en conservant l'orignial). Comme ca pour les modifications, il n'y as pas de problèmes de types.
Kenji
Ps:
Je me suis tromper dans mon code précédent:
Pour les binary, j'ai pas converti les valeurs en base 16.
Dim
ObjValue AsObject = My.Computer.Registry.LocalMachine.OpenSubKey(NodeText, False).GetValue(strValName, Nothing)
Dim strData AsString = String.Empty
If ObjValue.GetType() IsGetType(Byte()) Then
Dim Value() AsByte = CType(ObjValue, Byte())
Dim StrValue(Value.Length - 1) AsString
For iByte AsInteger = 0 To Value.Length - 1
StrValue(iByte) = System.Convert.ToString(Value(iByte), 16)
Next iByte
strData = String.Join(" "c, StrValue)
ElseIf ObjValue.GetType() IsGetType(Integer) Then
Dim Value AsInteger = CType(ObjValue, Integer)
Dim HexValue AsString = System.Convert.ToString(Value, 16)
strData = "0x" & NewString("0"c, 8 - HexValue.Length) & HexValue
ElseIf ObjValue.GetType() IsGetType(String()) Then
Dim Value() AsString = CType(ObjValue, String())
strData = String.Join(vbNewLine, Value)
Else
strData = CType(ObjValue, String)
EndIf
System.Windows.Forms.MessageBox.Show(strData)
(La fonction ByteToString ne sert plus)
Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012 2 juil. 2006 à 19:12
J'ai un problème pour l'écriture en binary :
dans Regedit meme, je tape 12 58 68 en valeur Binary le resultat après confirmation est identique pour la ligne ajouté.
Je tape la même chose sous VB 12 58 68 le résultat obtenu est different j'obtiens dans le registre 12 58 0a 04 ?
Par contre si je tape 12 25 55 55 55 55 56 que ce soit sous Regedit ou VB le résultat est ok la ligne ajouté dans regedit est identique a ce que j'ai tapé
Apparement c'est de l'hexa qu'il transforme en bin ?
If CDbl(tb_RegType.Text) = REG_BINARY Then
gvrnValue = ""
Dim ia As Integer = 0
gvrnValue = HexToDec(tb_Val.Text)
ReDim ValueByte(0) ' Tableau type Byte
For i As Integer = 1 To Strings.Len(gvrnValue) Step 2
ReDim Preserve ValueByte(ia)
ValueByte(ia) = CInt(Strings.Mid(gvrnValue, i, 2))
ia += 1
Next
end if
' Hexadecimal to Decimal
Public Function HexToDec(ByVal hexValue As String) As String
Dim intCpt As Integer = 0
Dim strOut As String = String.Empty
For intCpt = 1 To Len(hexValue) Step 2
strOut &= Int32.Parse(Strings.Mid(hexValue, intCpt, 2), System.Globalization.NumberStyles.HexNumber)
Next
Return strOut
End Function
Comprend pas ton code, y'a trop d'éléments externes. Simplifie le en remplacant ces éléments par des variables et des constantes.
Pour ta fonction HexToDec, tu rentre directement une chaine de style "12 25 55 55 55 55 56" ?
Kenji
Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 octobre 2012 2 juil. 2006 à 22:36
Oui je rentre 12255555555556
comme dans regedit Essayé vous verrez !!
qui est ensuite converti en Dec (a la base c'est de l'Hexa)
puis je met cela dans un tableau de type byte 2 par 2
Ca marche bien pour certaines valeurs mais pas tous ?
Merci