Seite 1 von 1
Wie liest man REG_BINARY-Werte aus der Registry aus?
Verfasst: 26.02.2005 17:58
von DataMiner
Habe folgendes Problem:
Unter XP gibt es unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mssmbios\Data
den Binärwert SMBiosData. Dort stehen viele schöne Sachen drin, die ich gerne in "Klartext" hätte (Mainboard, Bios-Version).
Nur - wie komme ich mit PB da dran?

Verfasst: 26.02.2005 19:13
von bingo
Code: Alles auswählen
RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\mssmbios\Data", 0,#key_read, @hkey)
RegQueryValueEx_(hKey, "SMBiosData", 0, @lType.l, 0, @laenge.l) ;länge ermitteln
*MemoryID = AllocateMemory(laenge)
RegQueryValueEx_(hKey, "SMBiosData", 0, @lType, *MemoryID, @laenge)
RegCloseKey_(hkey)
For i= 0 To laenge - 1
Debug PeekB(*MemoryID + i)
Next
FreeMemory(*MemoryID)

Verfasst: 26.02.2005 19:17
von DataMiner
JAAA!
Danke!
So geht das also. Jetzt muss ich dat nur noch lesbar machen...

Code
Verfasst: 26.02.2005 19:26
von JanFredi
Verfasst: 26.02.2005 19:47
von DataMiner
Code: Alles auswählen
RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\mssmbios\Data", 0,#KEY_READ, @hkey)
RegQueryValueEx_(hkey, "SMBiosData", 0, @lType.l, 0, @laenge.l) ;länge ermitteln
*MemoryID = AllocateMemory(laenge)
RegQueryValueEx_(hkey, "SMBiosData", 0, @lType, *MemoryID, @laenge)
RegCloseKey_(hkey)
For i= 0 To laenge - 1
If PeekB(*MemoryID + i) > 32
a$ + Chr(PeekB(*MemoryID + i) )
ElseIf PeekB(*MemoryID + i) = 0
a$+";"
EndIf
Next
FreeMemory(*MemoryID)
a$ = ReplaceString(a$, ";;;;;", ";", 1, 1)
a$ = ReplaceString(a$, ";;;;", ";", 1, 1)
a$ = ReplaceString(a$, ";;;", ";", 1, 1)
a$ = ReplaceString(a$, ";;", ";", 1, 1)
Debug a$
So ist es ~halbwegs~ lesbar. Rest ist Stringhandling.
