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)
:D

Verfasst: 26.02.2005 19:17
von DataMiner
JAAA!

Danke!

So geht das also. Jetzt muss ich dat nur noch lesbar machen...

:allright:

Code

Verfasst: 26.02.2005 19:26
von JanFredi
Veröffentliche bitte den Code.
Wenn sie möchten.
:praise: :praise: :praise: :praise: :praise: :praise: :praise: :praise:

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.

:mrgreen: :mrgreen: :mrgreen: