ayuda con recursion
Publicado: 27 Feb 2010, 17:10
Hola.
Estoy intentando ajustar una funcion que encontre en el foro de autoit en ingles.
http://www.autoitscript.com/forum/index ... t&p=603830
Quiero que la funcion busque apartir de una clave dada del registro de windows, en todas subclaves que dependan de esta, un valor con un dato puntual, el cual supuestamente aparecera una unica vez.
(Por ejemplo, una adaptador de red cuyo valor "ComponentID" coincida con un string definido por mi. windows podria tener facil una docena de estos identificados por subclaves 0001 ~ nnnn, dentro de la clave: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}]. Ese era el motivo original de esta funcion, pero creo que le podria dar mas usos)
Los parametros de la funcion serian la clave base en donde empezar la busqueda, el valor y el dato a buscar. Deberia devolver la clave completa donde encontro ese valor con ese dato, o devolver vacio ("").
Pense en este codigo para usar recursion, pero no funciona y no se que estoy haciendo mal. El script se queda detenido en esta sentencia:
$sKey = RegEnumKey ($sStartKey, $iIndex)
que es la primera dentro del ciclo while.
Func _RegSearch ($sStartKey, $sSearchVal, $sSearchData)
$sData = RegRead ($sStartKey, $sSearchVal)
if @error = 0 Then
if $sData = $sSearchData Then
$sResult = $sStartKey
$bFound = True
Else
$sResult = ""
$bFound = False
EndIf
Else
$sResult = ""
$bFound = False
EndIf
$iIndex = 1
while NOT $bFound
$sKey = RegEnumKey ($sStartKey, $iIndex)
if @error = 0 Then
$sResult = _RegSearch ($sStartKey & "\" & $sKey, $sSearchVal, $sSearchData)
EndIf
$iIndex +=1
WEnd
Return $sResult
EndFunc
Es mi primer intento de desarrollar funciones con recursion, y me imagino que el error sera tan simple que no lo puedo distinguir, porque revise codigo de otras funciones de usuario y no veo por que a mi no me funciona. :(
Alguna idea?
Saludos, Carlos
Estoy intentando ajustar una funcion que encontre en el foro de autoit en ingles.
http://www.autoitscript.com/forum/index ... t&p=603830
Quiero que la funcion busque apartir de una clave dada del registro de windows, en todas subclaves que dependan de esta, un valor con un dato puntual, el cual supuestamente aparecera una unica vez.
(Por ejemplo, una adaptador de red cuyo valor "ComponentID" coincida con un string definido por mi. windows podria tener facil una docena de estos identificados por subclaves 0001 ~ nnnn, dentro de la clave: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}]. Ese era el motivo original de esta funcion, pero creo que le podria dar mas usos)
Los parametros de la funcion serian la clave base en donde empezar la busqueda, el valor y el dato a buscar. Deberia devolver la clave completa donde encontro ese valor con ese dato, o devolver vacio ("").
Pense en este codigo para usar recursion, pero no funciona y no se que estoy haciendo mal. El script se queda detenido en esta sentencia:
$sKey = RegEnumKey ($sStartKey, $iIndex)
que es la primera dentro del ciclo while.
Func _RegSearch ($sStartKey, $sSearchVal, $sSearchData)
$sData = RegRead ($sStartKey, $sSearchVal)
if @error = 0 Then
if $sData = $sSearchData Then
$sResult = $sStartKey
$bFound = True
Else
$sResult = ""
$bFound = False
EndIf
Else
$sResult = ""
$bFound = False
EndIf
$iIndex = 1
while NOT $bFound
$sKey = RegEnumKey ($sStartKey, $iIndex)
if @error = 0 Then
$sResult = _RegSearch ($sStartKey & "\" & $sKey, $sSearchVal, $sSearchData)
EndIf
$iIndex +=1
WEnd
Return $sResult
EndFunc
Es mi primer intento de desarrollar funciones con recursion, y me imagino que el error sera tan simple que no lo puedo distinguir, porque revise codigo de otras funciones de usuario y no veo por que a mi no me funciona. :(
Alguna idea?
Saludos, Carlos