Problem mit dem count parameter der RegEnumKeyEX_()

Für allgemeine Fragen zur Programmierung mit PureBasic.
RalfR
Beiträge: 10
Registriert: 08.09.2004 15:06

Problem mit dem count parameter der RegEnumKeyEX_()

Beitrag von RalfR »

Tag zusammen,
ich hab eine Frage bezüglich der winAPI, bei der Benutzung der RegEnumKeyEX() habe ich jedes mal Probleme, mit dem Wert, der angibt, den wievielten Schlüssel er auflisten soll.

bei Microsoft steht zu diesem Parameter folgendes:

dwIndex
[in] Specifies the index of the subkey to retrieve. This parameter should be zero for the first call to the RegEnumKeyEx function and then incremented for subsequent calls.
Because subkeys are not ordered, any new subkey will have an arbitrary index. This means that the function may return subkeys in any order.

gesagt, getan, Problem ist nur, wenn in dem Schlüssel 3 Unterschlüssel sind und ich setze den Wert 3, so erhalte ich ERROR_NO_MORE_ITEMS, was nicht weiter Verwunderlich ist, wenn ich jedoch 2 einsetze, und eigentlich den Namen eines Unterschlüssels genannt bekommen sollte stürzt das Programm mit der Fehlermeldung: "Vorgang 'read' kann auf dem Speicher nicht ausgeführt werden" vollständig ab, deswegen meine Frage, ob jemand schon ein ähnliches Problem gehabt hat oder sogar Hilfe weiß.

erst mal vielen Dank
Ralf
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

Also bei mir klappt das, wenn ich bei 0 anfange und solange hochzähle wie ich #ERROR_SUCCESS zurückbekomme.

Code: Alles auswählen

Procedure.s RegEnumKey(hKey.l, sKey.s, pc.s) 
  ret.l 
  hnd.l
  vKey.s
  vSize.l
  vLWT.FILETIME
  remhnd.l
  Index.l 
  pc=UNC(pc)
    
  ret=RegConnectRegistry_(pc, hKey, @remhnd) 
  If ret=#ERROR_SUCCESS 
    ret=RegOpenKeyEx_(remhnd, sKey, 0, #KEY_ALL_ACCESS, @hnd) 
    If ret=#ERROR_SUCCESS 
      Index=0
      ret$=""
      While ret=#ERROR_SUCCESS 
        vSize=255 : vKey=Space(255) 
        ret=RegEnumKeyEx_(hnd, Index, @vKey, @vSize, 0, 0, 0, @vLWT)
        If ret=#ERROR_SUCCESS 
          ret$=ret$+vKey+"; "
        ElseIf Index=0
          ret$="*error: cannot enumerate keys*"
        Else 
          ret$=Left(ret$,Len(ret$)-2)
        EndIf  
        Index+1
      Wend 
    Else 
      ret$="*error: cannot access key*"
    EndIf
  Else
    ret$="*error: cannot access remote registry*" 
  EndIf  
  RegCloseKey_(remhnd) 
  ProcedureReturn ret$ 
EndProcedure 

PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
RalfR
Beiträge: 10
Registriert: 08.09.2004 15:06

Beitrag von RalfR »

Danke für die source, klappt jetzt auch, hab den fehler gefunden

bis dann
Ralf
Antworten