Seite 1 von 1

#REG_MULTI_SZ auslesen

Verfasst: 14.02.2007 16:41
von PureBasic4.0
Hi, Leute

Was passt an diesem Code nicht? Habe ihn schon mehrmals verändert. Manchmal gibt es einen Invaild Memory Access und manchmal kommt ein leerer String als Rückgabe heraus

Code: Alles auswählen

GetHandle = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SYSTEM\ControlSet001\Services\{02FA8931-DD7E-4B43-A9D8-C8F846F00D8B}\Parameters\Tcpip\", 0, #KEY_ALL_ACCESS, @hKey) 
If GetHandle = #ERROR_SUCCESS 
  lpcbData = 255 
  lpData = Space(255)
  lType = #REG_MULTI_SZ
  GetHandle = RegQueryValueEx_(#HKEY_LOCAL_MACHINE,"IPAddress", 0, @lType, @lpData, @lpcbData)
  Debug lpData
EndIf
RegCloseKey_(hKey) 
Ich bin mir sicher, dass der Pfad HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\{02FA8931-DD7E-4B43-A9D8-C8F846F00D8B}\Parameters\Tcpip richtig ist

Danke,
PureBasic4.0

Verfasst: 14.02.2007 19:51
von ts-soft
Hab deins jetzt nicht getestet, aber #REG_MULTI_SZ kann so nicht
funktionieren. Das sind mehrere Textzeilen durch 0-Byte getrennt.
Space 255 ist auch nicht richtig, sondern einen buffer von 0 und dann
auswerten wie gross er sein muß, danach mit der korrekten größe aufrufen.
Danach die Strings im Speicher wieder trennen.
Beispielcode (ist der Code zur Lib) hier:
http://www.purebasic.fr/german/viewtopi ... t=registry

Verfasst: 15.02.2007 14:08
von PureBasic4.0
Danke. Die Lib hat funktioniert.

Verfasst: 16.02.2007 11:03
von bingo

Code: Alles auswählen

If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Services\NetBIOS\Linkage", 0, #KEY_ALL_ACCESS, @hKey) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey,"Bind", 0, @lType.l,0,@lpcbData.l) = #ERROR_SUCCESS

Select lType
  Case #REG_MULTI_SZ
  
  membuf = AllocateMemory(lpcbData)
  
  RegQueryValueEx_(hKey,"Bind", 0, @lType,membuf, @lpcbData) 
  nuller.l
  splitmulti.s
  
  Repeat
  splitmulti = PeekS(membuf + nuller)
  Debug splitmulti
  nuller = Len(splitmulti) + nuller + 1
  Until nuller = lpcbData

  FreeMemory(membuf)

EndSelect
EndIf

RegCloseKey_(hKey)

EndIf 

End
:allright: