Página 1 de 1

AYUDA de acuerdo a la lista

Publicado: 07 Sep 2011, 20:46
por yasmany
hOLA NECESITO SABER COMO HAGO UN NAVEGADOR EN EL CUAL PERMITA BUSCAR Y SELECCIONAR SOLO CARPETAS Y CUANDO SE SELECCIONE EN LA CAJA DE TEXTO APARESCA LA DIRECCION COMPLETA DE LA VENTANA SELECCIONADA
mEDIANTE UN BOTON [APLICAR] PERMITA HACER UN ARCHIVO DE TEXTO DENTRO DE ESA CARPETA.
POR CIERTO EL Q ME AYUDE LE MOSTRARE ESTE PEQUEÑO PROGRAMA Q ESTOY APUNTO DE DESARROLLAR
LO TENGO HECHO EN CMD PERO LO QUIERO PASAR A AUTOIT desde ya muchas gracias no quiero volver a utilizar
cmd ni command por medio de autoit algo preferecial de autoit

Re: AYUDA de acuerdo a la lista

Publicado: 08 Sep 2011, 08:59
por Ximorro
Hola yasmany , bienvenido al foro.

Huuuuum, pues si la ayuda es "de acuerdo a la lista" va a ser que no. Para empezar el título no es nada aclarativo de lo que quieres preguntar. Y el estilo todo mayúsculas en la red significa que estás gritando, lo que creo que no es tu intención.
Además eso de "al que me ayude le mostraré el código" no va con la filosofía de este foro abierto. Lo normal es lo contrario, que nos muestres lo que tienes hecho, aunque no funcione (que es lo normal que para eso estás preguntando) y entonces en base a eso te ayudamos. Es más fácil así que si lo tenemos que hacer todo desde cero.

¿Qué quieres decir con que lo tienes hecho en cmd? ¿en un EXE del DOS?, ¿en un COM?, ¿en un BAT? ¿en un VBS? Si es un programa compilado no nos ayudará mucho, pero si es un bat o un vbs sería interesante verlo.

Esperando esa información voy a ir diciéndote lo que creo que necesitas, a ver si puedes con ello y si no nos muestras el programa y te decimos.
Para seleccionar una carpeta se usa la función FileSelectFolder.

Eso ya devuelve la dirección completa de la carpeta tal como quieres, así que directamente su resultado se lo asignas a la caja de texto con GUICtrlSetData.
(Aunque no entiendo lo que quieres decir con "la dirección completa de la ventana selecciada", será "la carpeta seleccionada" ¿no?

Para crear archivos se hace con FileOpen (por defecto ya es de texto).

¿Ya está? Si te he entendido bien en lo que quieres creo que es relativamente fácil. No sé si has hecho ya cosas con AutoIT, mírate la ayuda de estas funciones para tener información más completa, y te recomiendo que mires los tutoriales.
Empieza a hacer algo y nos preguntas las dudas.
Y ya te digo, si tienes el programa hecho en otro lenguaje nos lo puedes mostrar a ver si lo podemos "traducir".

Re: mi primer programa estoy en 0.0.0

Publicado: 08 Sep 2011, 20:34
por yasmany
muchas gracias Ximorro.....por cierto nunca he hecho en autoit ningun programita pero este es lo q trato de hacer el primer programa
LO LLAMO "PRIVATE FOLDER" por favor espliquenme q hace cada codigo q ponen
la interfaz quiero q cuente con 4 objetos
caja de texto
boton seleccionar carpeta [...]
boton [aplicar] (quiero crear un archivo ini dentro de la carpeta y aplicar un atributo de sistema a la carpeta )

contenido del archivo ini

[.ShellClassInfo]
CLSID={645FF040-5081-101B-9F08}
LocalizeResourceName=@%SystemRoot%\system32\shell32.dll,-0004


hace q la carpeta oculte el nombre original poniendo un nombre de algun archivo de sitema como Papelera de reciclaje o Equipo..digamos si tienes una carpeta llamada trabajos = Papelera de reciclaje y cuando quieras abrirla no es posible ni explorandola ..y para volver al estado normal debes poner el nombre oculto=trabajos

boton [quitar proteccion] esto se referira a la direccion pero esta ves el usuario pondra el nombre oculto de la direccion donde se encuentra

IMPORTANTE: cuando la carpeta esta en el escritorio..esta desaparece pero sigue ahi, no es poible visualizarla por mas q se ponga ver ocultos y de sitema... y mientras este dentro de una unidad u otra carpeta en particular esta se ve con un icono distinto.

Desde ya muchas gracias gente del foro.. el codigo del CLSDI aun me falta investigar un poco mas pero hasta eso quiero crearlo hasta q mi investigacion termine

Re: AYUDA de acuerdo a la lista

Publicado: 09 Sep 2011, 09:14
por Ximorro
Vale, creo que no es muy complicado, salvo lo de acceder a la carpeta por su nombre original una vez ha sido ocultada, como AutoIt no pueda acceder a eso se te queda ahí para siempre.

Pero una cosa, si creas una carpeta especial del sistema, que es lo que estás haciendo, ¿no tendrás problemas? O sea, si tienes una carpeta con archivos y la conviertes con eso en una Papelera de reciclaje, cuando borres la papelera de verdad que está en el escritorio, ¿no te borrará esa? De hecho la papelera del escritorio no es una carpeta, son todas las papeleras que hay por el sistema, una por disco duro como mínimo. Si tú haces una puede que la registre como tal y borre tus archivos sin querer...

¿Cómo cambias el tipo de carpeta Papelera, o MiPC, etc..? ¿cambiando el CLSID? (por cierto, eso no es más que un número identificativo que Microsoft va asignando a objetos de todo tipo, es un número arbitrario y único que una vez elegido no se cambia ni se comparte).

No he comprendido muy bien cómo se restaura la carpeta, lo de quitar protección. Una vez oculta, ¿puedes acceder a esa carpeta "trabajos" para quitarle el ini?
¿Cómo lo haces desde el CMD?

Como habrás notado este es un foro para programadores, así que lo mejor será que empieces programando un poquito y te vamos ayudando. Puedes hacer por ejemplo este tutorial muy básico:
http://www.emesn.com/autoitforum/viewto ... f=2&t=2246
que hizo un pringao del foro, así ves cómo se hace la interfaz. Básicamente con lo que pone ahí creas un par de botones más y con el comando GUICtrlCreateInput haces la caja de texto, y ya tienes la base gráfica, después "sólo" queda asignar código a los botones, que no será muy complicado excepto por lo de restaurar la carpeta que tengo las dudas que te ponía arriba.

Tienes también una guía para empezar aquí:
http://www.emesn.com/autoitforum/viewto ... f=2&t=2593

Lo mejor será modificar el pequeño GUI que hago en el tutorial, ve haciendo y te vamos ayudando. Una vez tengas eso con los botones y la caja de texto añadir el código para lo que quieres será muy fácil, pues son pocas líneas de código. Sorprendentemente lo que más va a costar va a ser el entorno gráfico.

Y lo dicho, tendrás que aclararme el proceso de desprotección, que no lo he entendido muy bien. Y si nos pasas el CMD para que veamos cómo se hace ahí mejor que mejor.

nombres de ocultos en la unidad pasado a un txt

Publicado: 09 Sep 2011, 23:00
por yasmany
gracias muy agradecido...por los tutos..
me surgio una idea mucho mejor TENGO UN PROGRAMA llamado "autorun pro enterprise" sirve para hacer presentaciones e instaladores...pero no lo utilizo para aquello lo q hago es realizar interfaces para hacer Q LOS CMD COMPILADOS.. funciones al presionar botones en el cual hago q mediante un texbox me muestre el contenido de un txt..
Ahora si fueras tan amable...y agradeciendo la paciencia q me has tenido y a todos vosotros lo q deseaba e publicaciones anteriores "no en la q dice DE ACUERDO A LA LISTA"
sino en la segund publicacion BUENO MI INTENCION ES OBTENER LOS NOMBRES DE TODOS LOS ARCHIVOS Y CARPETAS OCULTOS QUE CONTIENE LA UNIDA "X:" PERO Q ESTA INFORMACION SE ESTABLESCA EN UN ARCHIVO TXT POR EJEMPLO
lista.TXT
trabajos
deber.docc
carro22.jpg
bueno eso es lo quisiera q haga el codigo (SE HAN MOSTRADO SOLO LOS Q ESTAN OCULTOS los demas no se muestran)

Código: Seleccionar todo

; Muestra los nombres de ficheros y todos los ficheros en el directorio actual
$search = FileFindFirstFile("*.*")  

; Chequea si la búsquea a sido satisfactoria
If $search = -1 Then
    MsgBox(0, "Error", "No fiheros/directorios coincidentes con el criterio anterior")
    Exit
EndIf

While 1
    $file = FileFindNextFile($search) 
    If @error Then ExitLoop
        
    MsgBox(4096, "Fichero:", $file)
WEnd
; Cierra el identificador de la búsqueda
FileClose($search)
este code esta para todos los archivos
ahora en este codigo me muestra TODOS LOS ARCHIVOS PERO mediante un mensaje,,,,quisiera q me LO ESCRIBA EN UN ARCHIVO DE TEXTO Q EL MISMO CODIGO DEBE CREARLO...pero q no se habra el archivo (los archivos deben presentarse en lista)
abra como reducir el codigo pero obteniendo solo los nombres de los archivos ocultos
desde ya muchas gracias gente del foro

Re: AYUDA de acuerdo a la lista

Publicado: 12 Sep 2011, 08:58
por Ximorro
me surgio una idea mucho mejor
¿Entonces has abandonado el otro programa?

Esta nueva consulta veo que la haces en otro post. Sigue entonces el hilo allí, por favor no dupliques las consultas que si no la gente contesta en los dos sitios y es un lío seguirlo.

Re: AYUDA de acuerdo a la lista

Publicado: 12 Sep 2011, 13:36
por yasmany
Hola Ximorro te agradesco mucho lo de los tutoriales q expusiste en respuesta a lo q te pedia....pues te cuento q me sirvio de mucho eso de crear la GUI..estoy muy agradecido PARECE algo tonto mis palabras PERO es la neta carnal....te acuerdas q queria obtener la ubicacion de una carpeta..pues ya pude y lo obtube en un label este es mi code:
por favor dime q podria estar demas pues yo iba modificando el codigo q habia en los ejemplos de la ayuda de autoit.
gracias ...estoy "tratando" hacer varias cosas...

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

GUICreate("Private folder", 500, 200)
;$btnMini = GUICtrlCreateButton("&Minimizar", 10,30, 80,30)
$btnes = GUICtrlCreateButton("...", 468,28, 30,30)
$encabezado = GUICtrlCreateLabel("Seleccione la carpeta", 10, 10, 450, 21, 0)
$Label_1 = GUICtrlCreateLabel("", 10, 30, 455, 26, 0x1000)
GUISetState(@SW_SHOW)



While 2
   Switch GUIGetMsg()
      Case $btnes
	  $var = FileSelectFolder("Seleccione una carpeta.","",1)
	  GUICtrlSetData($Label_1, $var)
      Case $GUI_EVENT_CLOSE
         ExitLoop
   EndSwitch
WEnd

;ESTO ES LO DE MINIMIZAR (suspendido)
;While 1
 ;  Switch GUIGetMsg()
  ;    Case $btnMini
   ;      GUISetState(@SW_MINIMIZE)
    ;  Case $GUI_EVENT_CLOSE
     ;    ExitLoop
   ;EndSwitch
;WEnd
consultas
- como hago para seleccionar solo unidades ¿se utiliza el FileSelectFolder u otro?
- como hago para poner negrita al texto del label
- como hago editable a un label ¿Talvés hay como poner un texbox ?
- estoy confundido al hacer q varios botones funcionen por ejemplo los q estan en ";" no me salia cerraba la ventana 1 vez y seguia la ventana y ahi si funcionaba el de minimizar...dime como hago para utilizar varios botones poderlos cliquear

Re: AYUDA de acuerdo a la lista

Publicado: 13 Sep 2011, 08:48
por Ximorro
Me alegro de que te haya servido el tutorial. Se aprende muchísimo viendo ejemplos, te recomiendo, sobre todo al principio, que cuando te encuentres una nueva función mires la ayuda para ver cómo se usa bien y le eches un vistazo al ejemplo de programa que viene. Casi todas las funciones vienen con un programa de ejemplo que las usa ¡y eso es genial!

Uau, veo que hasta has usado estilos. :smt004 Ya es cuestión de gustos pero te recomiendo que para estas cosas que están codificadas con numeritos uses las constantes correspondientes, así cuando veas el programa un tiempo después puedas recordar qué habías puesto.
Por ejemplo si dentro de varios meses ves el estilo 0x1000 ¿qué era eso? Es más fácil recordarlo, o al menos buscarlo en la ayuda, si pones $SS_SUNKEN ("sunken" es "hundido" en inglés, lo que da una idea de lo que hace el estilo).
Tal como pone en la ayuda, para incluir las constantes para etiquetas hay que usar una udf:
#include <StaticConstants.au3>

Por cierto, a la etiqueta $encabezado le has puesto el estilo a cero. Mejor no pongas nada porque con eso estás quitándole el estilo por defecto.

A ver las preguntas...
a) Que yo sepa no hay nada directo para seleccionar unidades. O dejas que seleccionen una carpeta con FileSelectFolder() y entonces extraes los dos primeros caracteres para tomar la unidad (o uno si sólo quieres la letra) o tienes que montar tú un selector.
Para montarlo supongo que lo mejor sería usar DriveGetDrive() que devuelve un array con las unidades según el tipo que le pasas (discos fijos, CD, etc), y con eso montar una lista para presentar al usuario por ejemplo en un combobox, que te advierto ya empieza a ser un control algo avanzado.
Si vas por este camino te recomiendo poner las dudas en un nuevo post, quizás haya otros usuarios interesados en este tema.

b) Para cambiar la negrita se cambia las características de la fuente con GUICtrlSetFont(). Con eso puedes cambiar el tamaño, negrita, subrayado, tipo de fuente, etc. Como siempre mira la ayuda para ver los detalles. Para cambiar sólo la negrita sería:
$lbl = GUICtrlCreateLabel("Una etiqueta en negrita", 10, 10)
GUICtrlSetFont(-1, -1, 800)


-1 se usa muchas veces para indicar "valor por defecto". Hay que ver la ayuda de cada función para ver dónde permite esto. En GUICtrlSetFont el primer -1 indica "el control anterior" (esto es típico en muchas funciones que tratan con controles o GUIs), el segundo es el tamaño, que la ayuda nos dice que es variable según el tema (8,5 ó 9), así que poniendo -1 dejamos que lo deje como está.
El 800 para la negrita es un poco raro, pero no es invento de AutoIT, es como funciona el grosor en las fuentes truetype. Normalmente 400 es normal, y 800 negrita.

c) Si quieres que el usuario edite el label efectivamente lo mejor es hacer un Input (una sóla línea) o un Edit (caja de texto multilínea). Las funciones estándar para crear controles siempre empiezan por GUICtrlCreate, así que para hacer un Input busca la función GUICtrlCreateInput, y así las demás.
Si quieres editar el texto del label por programación, pero no es necesario que lo toque el usuario, entonces puede ser buena idea dejarlo como label. Puedes cambiar luego el texto del label con GUICtrlSetData, como ya has utilizado.

d) Es que todo el control de eventos debe estar en el mismo bucle, sino estás "encerrado" en el primero, donde no miras minimizar, hasta que sales de él dándole a cerrar, entonces hace el ExitLoop y pasa al siguiente bucle, donde ya miras minimizar por eso ya funciona...

Es tan sencillo como añadir un Case para cada evento. Pon un solo While:

Código: Seleccionar todo

While 1
  Switch GUIGetMsg()
      Case $btnes
         $var = FileSelectFolder("Seleccione una carpeta.","",1)
         GUICtrlSetData($Label_1, $var)
      Case $btnMini
         GUISetState(@SW_MINIMIZE)
      Case $GUI_EVENT_CLOSE
         ExitLoop
   EndSwitch
WEnd
Si añades más controles su gestión de eventos debes añadirla a ese mismo bucle, poniendo más Case al Switch, uno por cada evento.
Y por cierto, para hacer bucles infinitos lo más formal es poner While True. Para abreviar se ha estandarizado el uso de While 1, que es equivalente. Lo de While 2, aunque funciona, no es nada habitual. Cualquier cosa distinta de cero es True, así que puedes poner 2 ó 45.456 o "Pepito", pero no es muy normal. Es mejor usar el 1 (o True) para que cualquiera que vea el programa lo identifique enseguida como bucle infinito.