Página 1 de 1

manejo de ListView y TreeView

Publicado: 05 Oct 2009, 19:05
por vicfrodo
Hola a todos. Necesito ayuda en el script que estoy haciendo.
El script es para configurar varias opciones de Windows XP, como por ejemplo, activar el firewall o en "opciones de carpeta" del explorador seleccionar las opciones "ocultar las extensiones de archivos para tipos de archivos conocidos" o "mostrar todos los archivos ocultos", etc.
Conseguí que mi script abriera cada una de las ventanas del panel de control en donde se encuentran esas opciones pero tengo problemas con los Listview y los treeview. Puedo ver cada nodo del treeview y seleccionarlo pero no puedo saber si esta checkeado o no.
Intenté con esto:
$EstaCheckeado = ControlTreeView("Opciones de carpeta", "Tree1", "[CLASS:SysTreeView32; INSTANCE:1]", "IsChecked", "#0|#12")
pero siempre obtengo -1 independientemente de si esta checkeado o no.

Tampoco funciona el comando para checkearlo:
ControlTreeView("Opciones de carpeta", "Tree1", "[CLASS:SysTreeView32; INSTANCE:1]", "Check", "#0|#12")

Y no me sirve enviarle la tecla "SPACE" porque primero tengo que saber si esta checkeado o no.

Desde ya muchas gracias.

Re: manejo de ListView y TreeView

Publicado: 06 Oct 2009, 20:36
por Chefito
Mmmmm.....parece ser que no son controles checkbox y radio button. Me he dado cuenta que son imágenes.
Si vas a trabajar con un control treeview mira en la ayuda las funciones UDFs, en User Defined Function>GuiTreeView Management. Mira todas esas funciones que te facilitará las cosas.
Te pongo un pequeño ejemplo que te indica cuando está marcada y señalada una opción. Como ya te dije antes son imágenes, y como tales la función _GUICtrlTreeView_GetImageIndex te devuelve su índice.
Debes tener abierta la ventana "Opciones de carpeta" para que el script se ejecute.

Código: Seleccionar todo

#Include <GuiTreeView.au3>

If WinExists("Opciones de carpeta") Then

    $cont=0

    $hTreeView = ControlGetHandle("Opciones de carpeta", "", "[CLASS:SysTreeView32; INSTANCE:1]")

    $hItem=_GUICtrlTreeView_GetFirstItem($hTreeView)    ;obtengo el primer item.

    While _GUICtrlTreeView_GetCount($hTreeView)>$cont

        $textItem=_GUICtrlTreeView_GetText($hTreeView,$hItem)   ;obtengo el texto del item.

        $checked=_GUICtrlTreeView_GetImageIndex($hTreeView,$hItem)  ;averiguo el índice de la imagen.

        Switch $checked

            Case 0  ;valor de imagen "marcado"

                MsgBox(0,"marcado (checkbox)",$cont &" - "&$textItem &" - marcado")

            Case 1  ;valor de imagen "no marcado"

                MsgBox(0,"no marcado (checkbox)",$cont &" - "&$textItem &" - no marcado")

            Case 2  ;valor de imagen "Señalado"

                MsgBox(0,"Señalado (radio button)",$cont &" - "&$textItem &" - Señalado")

            Case 3  ;valor de imagen "No señalado"

                MsgBox(0,"No señalado (radio button)",$cont &" - "&$textItem &" - No señalado")

        EndSwitch

        $hItem=_GUICtrlTreeView_GetNext($hTreeView,$hItem)  ;me muevo al siguiente item.

        $cont+=1

    WEnd

Else

    MsgBox(0,"Error","No está abierta Opciones de carpeta. Debes abrirla para que funcione el script.")

EndIf

 
Si quieres comprobar un item específico puedes utilizar _GUICtrlTreeView_FindItem para saber el handle de este item. Lo comprueba pasándole el texto del item como parámetro.

También puedes comprobar estos valores mirando en el registro de windows, que es ahí donde se guardan estos datos. Yo creo que sería lo más correcto.

Saludos.

Re: manejo de ListView y TreeView

Publicado: 07 Oct 2009, 09:18
por Ximorro
Una duda, ¿cómo sabes el estado de la opción según el índice de la imagen? Es decir, que si tiene índice 0 es un checkbox marcado, si es 2 es un radiobutton señalado...

¿Ensayo y error o siempre se sigue ese esquema? Es que si hay que mirar en cada TreeView (o similar) de opciones qué indices de imagen corresponden con qué estados puede ser una pesadilla...

En ese caso casi mejor olvidarse de todo eso y como dices mejor mirar directamente en el registro de windows...

Re: manejo de ListView y TreeView

Publicado: 07 Oct 2009, 14:30
por Chefito
La verdad? Ensayo y error :smt005 .
Pero me imagino que como son índices de imágenes de win, siempre serán los mismos para estas imágenes (checkboxes, radio buttons (activados y desactivados), carpeta, archivos, etc). Sobre todo si son cosas del propio S.O.
No creo que haya ningún problema con esto. Seguro que al ser algo que lleva el win esté bastante estandarizado.....digo yo :smt005 .
Y respecto a que es mejor utilizar el registro de win para esto....como ya dije anteriormente, estoy contigo de que sí.

Saludos.

Re: manejo de ListView y TreeView

Publicado: 08 Oct 2009, 10:35
por Ximorro
Se podría asumir que está estandarizado si fueran índices de un almacén global de imágines, pero entiendo que cada TreeView de estos almacena sus propias imágenes con sus índices propios (supongo). En ese caso hay que mirar cada uno qué imágenes ha almacenado y con qué índices. Aunque sí haya una especie de norma y por ejemplo los activados vayan antes de los desactivados, los checkbox antes de los radiobutton... cada treeview o listview será un mundo y habrá que investigarlo específicamente.

vicfrod, mejor vas buscando esas opciones en el registro :smt002