Seite 1 von 1

Problem mit dem count parameter der RegEnumKeyEX_()

Verfasst: 10.09.2004 21:03
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

Verfasst: 10.09.2004 21:12
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 


Verfasst: 10.09.2004 23:13
von RalfR
Danke für die source, klappt jetzt auch, hab den fehler gefunden

bis dann
Ralf