Página 1 de 1

Instalación desatendida de impresora

Publicado: 26 Nov 2009, 19:11
por nemsis
Hola estoy realizando una aplicación de drivers de una impresora, realizo la instalación desatendida y funciona correctamente, pero ahora quiero ocultar la ventana, utilizo run("archivo", "",@SW_HIDE), pero esto hace que se pulse inicio y se detine la instalación.
Me podriais ayudar para ver que hago mal?? Os copio el condigo por si os ayuda a entenderlo

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Run("C:\brother\Start.exe","",@SW_HIDE)
;Seleción del idioma
Sleep(5000)
Send("{TAB}")
Send("{DOWN}")
Send("{ENtER}")

;Seleciona instalación inicial
Sleep(2000)	
Send("{TAB}")
Send("{ENtER}")

;Instala MFL-Pro Suite sin PaperPort(TM) 11SE
WinWait("Macromedia Flash Player 8" )	
Send("{TAB 2}")
Send("{ENtER}")

;Acepta el contrato de licencia
WinWait("Brother MFL-Pro Suite Instalación", "Contrato de licencia")
WinWait("Brother MFL-Pro Suite Instalación", "&Sí")
Send("!s")

;Seleciona instalación personalizada
WinWait("Brother MFL-Pro Suite Instalación", "Instalación Personalizada")
ControlClick("Brother MFL-Pro Suite Instalación", "Instalación Personalizada", 1044)
Send("!s")

;Ruta de destino
WinWait("Brother MFL-Pro Suite Instalación", "&Siguiente >")
Send("!s")


;Nombre
WinWait("Brother MFL-Pro Suite Instalación", "&Siguiente >")
Send("!s")


;Seleción de componentes que se van a instalar
WinWait("Brother MFL-Pro Suite Instalación", "Seleccionar componentes")
Send("{TAB 4}")
Send("{SPACE}")
Send("!s")

;Desactivar icono de estado
ControlClick("Brother MFL-Pro Suite Instalación", "Activar Monitor de Estado", 1052)
WinWait("Brother MFL-Pro Suite Instalación", "&Siguiente >")
Send("!s")

;Ventana registro en línea
WinWait("Brother MFL-Pro Suite Instalación", "Registro en línea")
Send("!s")

;Ventana finalizar
WinWait("Brother MFL-Pro Suite Instalación", "Finalizar")
Send("{DOWN}")
Send("{TAB}")
Send("{ENtER}")

;Aceptar
WinWait("Brother MFL-Pro Suite Instalación")
Send("{ENtER}")

WinActivate("Macromedia Flash Player 8" )	
Send("{TAB 4}")
Send("{ENtER}")

Re: necesito vuestra ayuda

Publicado: 26 Nov 2009, 21:08
por arkcrew
Puedes probar a utilizar un comando shellexecute

Algo asi en tu caso..

Código: Seleccionar todo

ShellExecute("C:\brother\Start.exe",@SW_HIDE)
pruebalo haber si te va

Un saludo!

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 10:17
por nemsis
Muchas gracias arkcrew, lo he probado, pero al ejecutar el programa se me queda la pantalla en blanco.
No se si esto influira, pero lo que quiero ocultar es un asistente hecho con flash.
La verdad que estoy bastante perdida, se os ocurre algo más.
Muchas gracias y un saludo a todos.



Por cierto este foro esta genial y es muy completo. Enhorabuena a los q lo creais y ayudais a mantenerlo.

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 10:35
por arkcrew
mira, pasame todos los archivos que el program necesita desatender y yo te miro el error en mi maquina

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 10:49
por nemsis
como se adjunta aqui archivos?, es q no tengo ningun ftp para pasarlo.
Son 72 mb de archivos.
Un saludo

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 10:52
por arkcrew
es simple, puedes subirlo a mediafire www.mediafire.com una vez lo subas e daas el link de descarga.
Saluds

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 10:56
por Ximorro
Me temo que si la ventana no está activa los comandos Send no los recibe, pues estos van necesariamente a la ventana activa. Al ocultarla es otra ventana la que queda activa con lo que es en esta última dónde estas mandando los TAB, ENTER y compañía.

Una opción es vivir con que se vea la instalación... otra que igual funciona es, en vez de enviar teclas, pulsar los botones correspondientes con ControlClick, en este caso le especificas la ventana y el control, con lo que no es necesario que sea la ventana activa.
De todas maneras te traduzco de la ayuda: "Algunos controles se resistirán el cliqueo a menos que estén en la ventana activa. Utilice la función WinActivate() para forzar la ventana del control en primer plano antes de usar ControlClick().

Pero con la ventana oculta aún es más probable que no funcione... hay otra versión de Send que se llama ControlSend. Ésta va al control concreto en vez de a la ventana activa. Pensándolo bien prueba esto antes que ControlClick, además requerirás menos cambios en tu programa.

Para usar ControlSend (y también ControlClick) te hara falta conocer el ID del control correspondiente, para eso tendrás que usar la utilidad AutoIt Window Info (viene con AutoIt) para ir viendo cómo se llaman...

Y ya te digo, si todo esto es un follón, avisas al usuario que se espere que se va a instalar el programa y que vea cómo van pasando las ventanas, así se entretiene :smt002

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 11:18
por arkcrew
Es verdad, no me fije, ximorro tiene razón, no creo que puedas instalar una aplicación de esa manera, pero puedes buscar otras formas.

Te dejp algunas:

Prueba a ver qeu etension tiene el instalador y desatiende su instalacion con el winrar, te explico como

1- baja esta aplicación" universal switch finder"
2- Abre con esa aplicación el instalador y te saldrán la lista de parametros que puedes utilizar.
3.Mete el archivo a ibnstalar en un sfx de winrar con el parametro siguiente:

"Setup=nombredelarchivo.extension /loscomandosdel programa separados por espacio y con barra"
Algo asi: Setup=Archivo.exe /s o Setup=Archivo.msi /verysilent

Es cuestion de lo qeu te diga el programa.

Tras eso, ejecuta el sfx y veras qeu se instala de forma desatendida sin mostrar nada

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 11:20
por nemsis
Hola Ximorro
jeje tiene sentido,se me tendría que haber ocurrido.
El problema es que el boton no tiene id o por lo menos con esa aplicacion no me lo daba, por esta razon lo hice con tab y no con controlclick. Sabes si hay alguna otra forma de averiguarlo??
Voy a probar con winactivate que a lo mejor puede ser una solución.
Que se vea la ventana sería mas facil, el problema que los botones quedan activos y si algún graciosillo en medio de la instalación lo toca se quedaría pillada, por eso lo queria silenciar.
Me apunto el controlSend que no lo conocia :smt002 :smt041


arkcrew estoy subiendolo, t mando el enlace en cuanto lo tenga.

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 11:21
por arkcrew
Te acabo de dejar una manera, no necesitas autoit y es bastante rapida

Re: necesito vuestra ayuda

Publicado: 27 Nov 2009, 11:51
por Ximorro
Hum ¿no es un instalador normal de Windows? Esto de los controles va con controles de Windows estandar, si por ejemplo es una ventana "bonita" y la están dibujando a pelo no hay realmente controles capturables.
En ese caso puedes llegar al control "general" de la ventana, que quizás sea simplemente el panel donde se dibuja todo, y con ControlClick poner las coordenadas (locales a ese panel) donde está el botón. Pero no sé yo si ControlClick podrá con eso en una ventana oculta...

Si el programa viene con un instalador desatendido, como indica arkcrew (típicamente parámetro /S), puedes meterlo en un rar... o hacerlo en autoit pasando ese parámetro al ejecutar el instalador, por ejemplo:
ShellExecute("instaler.exe", "/s", @ScriptDir, default, @SW_HIDE)

Igual ni hace falta el @SW_HIDE, los programas que se pueden instalar en modo silencioso, son eso.... silenciosos :smt003

Re: Instalación desatendida de impresora

Publicado: 27 Nov 2009, 19:56
por Chefito
Jejejeje....bueno, como ya veo que la cosa está muy avanzada y yo tengo otra solución me meto en el tema :smt003 .
Los controles de los programas flash digamos que son chungos de atacar (yo no he podido).
Ante esta situación propongo otra solución :smt002 .
Como tantos otros proyectos mios, tengo uno en mente (digamos que a medio) para instalar drivers de cualquier impresora. Lo necesitaba para el curro......pero como soy un gandul no lo hice :smt005 (como siempre).
Mira el comando de consola RUNDLL32 PRINTUI.DLL,PrintUIEntry /? . Te saldrá una ayuda muy interesante para poder hacer lo que tu quieras con las impresoras....entre las opciones que te salen una de ellas es instalar los controladores desde un archivo .inf.
No te digo más :smt005 . Lee la ayuda y los ejemplos que te salen que están muy claritos.
Gracias a esto puedes ejecutarlo desde autoit de forma silenciosa (sin asistente ni nada, solamente con los drivers).
Si tienes problemas comunicalo.

Saludos.

Re: Instalación desatendida de impresora

Publicado: 30 Nov 2009, 10:28
por Ximorro
¡Menuda ristra de opciones! ¡¡necesito un emoticón de boca abierta!!

Si ya digo que una parte es saber AutoIT, la otra es saber Windows...

Me sorprende que una función dentro de una dll tenga una ayuda tan impresionante, ¿es una excepción o suelen ir así documentadas?
Que por cierto ahora me entero que puedes ejecutar la ayuda de una dll...

Re: Instalación desatendida de impresora

Publicado: 01 Dic 2009, 00:05
por Chefito
Sí, que yo sepa sirve para utilizar algunas funciones de algunas dlls :smt002 .

Te dejo varios enlaces para ver si te aclara un poco la cosa:
http://support.microsoft.com/kb/164787/es

Algunos ejemplos: http://www.telecable.es/personales/jrub ... p00001.htm

Y simplemente una búsqueda de "rundll32" en la página de microsoft mira la cantidad de resultados y temas que te devuelve:
http://support.microsoft.com/search/def ... CID%3D1034

Saludos.

Re: Instalación desatendida de impresora

Publicado: 16 Dic 2009, 13:16
por Ximorro
Gracias por los enlaces.
Sí, si rundll.exe ya lo conocía, lo que me ha impresionado es la ayuda del comando ese en PRINTUI.DLL...

Muy interesante (en el plano práctico) el segundo enlace, y también interesante ver que muchas de esas cosas ya las ofrece AutoIt directamente, ¡bien por AutoIt! :smt003