VB2005 und GetBinaryValue()

13/03/2008 - 00:53 von Tom Fuchs | Report spam
Hallo Wissende,

bin zwar normal ein stiller Lesender hab jetzt aber doch ein Problem in
meinem ersten VisualBasic-Projekt. Erstellt wird es mit VisualStudio2005.

Ich möchte mit der Methode GetBinaryValue() der Klasse StdRegProv Werte
des Types REG_BINARY aus der Registry auslesen.

Die Funktion gibt mir als Rückgabewert 0 zurück, d.h. alles in Ordnung

Ich bekomme jedoch das ByteArray (Dim RegBlock(76) as Byte) nicht mit
den Registry-Werten gefüllt. Es schaut zu mindest so aus.

Der Zugriff auf das ByteArray ergibt nicht die erwarteten Werte so wie
sie in der Registry stehen.

Ich sehe das Problem in der Umsetzung des Registry-Datentypes REG_BINARY
in ein passenden VB2005-Datentype (in VB6 konnte man den Datentyp ANY
benutzen).

Das ganze in einem VBScript umgesetzt, funktioniert zu meiner 100%igen
Zufriedenheit.

Warum nicht in VisualBasic 2005?

Nachfolgend mein Code

Const HKEY_LOCAL_MACHINE = &H80000002
Dim RegBlock(76) As Byte
Dim RegByte As Byte
Dim sValue As String
Dim strKeyPath As String = "SYSTEM\CurrentControlSet\Control\GroupOrderList"
Dim strKey As String = "Base"

objReg = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "oot\default:StdRegProv")

RetValue=objReg.GetBinaryValue(HKEY_LOCAL_MACHINE, strKeyPath,strKey,_
RegBlock(0))
If RetValue = 0 Then
sValue = ""
For Each RegByte In RegBlock
sValue = sValue & RegByte & ","
Next
End If

sValue sieht dann so aus: 152,0,0,0,0,0,0,0,0, ... ,0,
Also eine 8Bit-Zahl, aber nicht die Richtige(&H12 = 18) und dann nur 0

*kopfgratz*

Nun Leute. Was mach ich hier falsch?


Mein Dank im Voraus

Schöne Grüße aus dem Saarland
Tom
 

Lesen sie die antworten

#1 Peter Götz
13/03/2008 - 18:28 | Warnen spam
Hallo Tom,

Ich möchte mit der Methode GetBinaryValue() der
Klasse StdRegProv Werte des Types REG_BINARY
aus der Registry auslesen.



Warum willst Du zum Lesen der Registry WMI bemühen,
anstatt einfach die simple Methode Registry.GetValue()
zu verwenden?

Dim i As Integer
Dim Bytes As Object
Dim KeyName As String
Dim ValueName As String
KeyName = "HKEY_LOCAL_MACHINE\" & _
"System\CurrentControlSet\" & _
"Control\GroupOrderList"
ValueName = "Base"
Bytes = Microsoft.Win32.Registry.GetValue _
(KeyName, ValueName, Nothing)

' Gelesene Bytes in hexadezimaler Darstellung
' in einem String ausgeben
If Bytes IsNot Nothing Then
Dim bArray() As Byte = CType(Bytes, Byte())
Dim strBuffer As String = ""
For i = 0 To bArray.GetUpperBound(0)
If i Mod 8 = 0 Then
strBuffer &= ControlChars.CrLf
Else
strBuffer &= "; "
End If
strBuffer &= Hex(bArray(i)).PadLeft(2, "0"c)
Next
MsgBox(strBuffer, MsgBoxStyle.Information)
End If

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen