Problema con el cierrre de un programa desatendido

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
BlackCat
Mensajes: 2
Registrado: 23 Jun 2015, 04:38

Problema con el cierrre de un programa desatendido

Mensaje por BlackCat »

Hola soy nuevo en el foro y en esto del autoit y leyendo un poco y a huevo ya e logrado avances básicos, mas que todo, estoy trabajando en hacer desatendidos para después hacer un wip a gusto propio, bueno eso va bien ya varios programas los e logrado pero el office 2007 enterprise auto activado me esta costando la parte del cierre del programa, que es cuando termina de instalar el me ejecute el cierre Send("{ALTDOWN}c{ALTUP}"). me explicare cual creo que es el problema, yo como soy muy nuevo en esto me ayudo con el au3recorder para generar la mayor parte del script y comandos, como hacerlo asi crea muchos errores simplemente lo voy retocando un poco y probando hasta llegar a la meta ok. me ayudo mucho también con el au3Info, para sacar la información de las ventanas etc.
con este office 2007 el problema es q todas las ventanas se llaman igual y aun con el au3info todas generan el mismo visible text y hidden text. todos los comandos los ejecuta bien, me instala en la partición d: que es donde yo quise instalar D:Microsof Office 20007, selecciona solo los componentes que yo deseo instalar, instala y mientras instala el ejecuta el comando de cierre Send("{ALTDOWN}c{ALTUP}") muchísimo antes de tiempo y cuando termina de instalar y ocupamos que el haga el alt c y cierre el programa no lo hace pero el script no queda en pausa como pasa a veces que el programa no puede o sabe donde ejecutar el siguiente comando. espero me entiendan, pondré capturas del au3info y los scripts hechos.

Capturas
Imagen

Imagen

Imagen

Scripts
Script 1, con este me dio fallos a la hora de seleccionar componentes a instalar ejemplo no quería que instalara el outlook y no ejecutaba el comando y se pausaba el script

Código: Seleccionar todo

#region --- Au3Recorder generated code Start (v3.3.9.5 KeyboardLayout=0000040A)  ---

#region --- Internal functions Au3Recorder Start ---
Func _Au3RecordSetup()
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '0000040A' Then
  MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(0000040A->' & $aResult[1] & ')')
EndIf

EndFunc

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc

_AU3RecordSetup()
#endregion --- Internal functions Au3Recorder End ---


Run('OfficeEnterp07SP1.exe')
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}p{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{SPACE}")
_WinWaitActivate("classname=Net UI Tool Window_CatalystFlexUI","")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}b{ALTUP}{TAB}{RIGHT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}d{SHIFTDOWN}.{SHIFTUP}{ALTDOWN}h{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}c{ALTUP}")
#endregion --- Au3Recorder generated code End ---

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
Script 2 ya corregido eso y con el problema del cierre (aca el script no queda en pausa)

Código: Seleccionar todo

#region --- Au3Recorder generated code Start (v3.3.9.5 KeyboardLayout=0000040A)  ---

#region --- Internal functions Au3Recorder Start ---
Func _Au3RecordSetup()
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '0000040A' Then
  MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(0000040A->' & $aResult[1] & ')')
EndIf

EndFunc

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc

_AU3RecordSetup()
#endregion --- Internal functions Au3Recorder End ---


Run('OfficeEnterp07SP1.exe')
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}p{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}b{ALTUP}{TAB}{RIGHT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}d{SHIFTDOWN}.{SHIFTUP}{ALTDOWN}h{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}c{ALTUP}")
#endregion --- Au3Recorder generated code End ---

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
Script 3 aqui tratando de ver si me reconoce el boton de cerrar (alt c) pero el script se queda pausado.

Código: Seleccionar todo

#region --- Au3Recorder generated code Start (v3.3.9.5 KeyboardLayout=0000040A)  ---

#region --- Internal functions Au3Recorder Start ---
Func _Au3RecordSetup()
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '0000040A' Then
  MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(0000040A->' & $aResult[1] & ')')
EndIf

EndFunc

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc

_AU3RecordSetup()
#endregion --- Internal functions Au3Recorder End ---


Run('OfficeEnterp07SP1.exe')
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}p{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{DOWN}{DOWN}{DOWN}{ENTER}")
Sleep(1000)
Send("{ALTDOWN}n{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","")
Sleep(1000)
Send("{ALTDOWN}b{ALTUP}{TAB}{RIGHT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{LEFT}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}{BACKSPACE}d{SHIFTDOWN}.{SHIFTUP}{ALTDOWN}h{ALTUP}")
_WinWaitActivate("Microsoft Office Enterprise 2007","&Cerrar")
Send("{ALTDOWN}c{ALTUP}")
#endregion --- Au3Recorder generated code End ---

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

Ojala me entiendan y me puedan ayudar a ver si logro q al final cierre solo, xq al ir en un wip ocupo que cierre para q los demas programas se instalen.
Muchas Gracias
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Problema con el cierrre de un programa desatendido

Mensaje por Chefito »

Con la función send es muy difícil guiar a una persona, porque no sabes si le estás mandando las pulsaciones adecuadas a la ventana o que otro problema puede haber. Al final veo que manda una cantidad de pulsaciones impresionante. Mira a ver que todas hagan lo que tienes que hacer y no te hagan algo raro. Mira también que esté activa en todo momento la ventana adecuada, porque sino, le puedes enviar las pulsaciones de cierre a otra ventana u otro sitio.

Igualmente te digo, que para empezar o como última opción, no está mal empezar a automatizar ventanas con la función send. Pero por supuestos hay otras formas más adecuadas y directas de hacerlo....y no son nada complicadas. Mira en la ayuda de autoit las funciones que empiezan por control.......... , como por ejemplo controlclick, controlsend, controlsettext, etc. Son mucho más directas, no suele hacer falta que esté la ventana a la que atacas activa, y muchas cosas buenas más :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
BlackCat
Mensajes: 2
Registrado: 23 Jun 2015, 04:38

Re: Problema con el cierrre de un programa desatendido

Mensaje por BlackCat »

Gracias amigo me a sido muy útil la info en teoría ahora tendré que sacar mi tiempo para la practica, es bueno saber que alguien aun ayuda por aca a los novatos, yo en mi vida en estudiado nada de programación y menos por script, lo muy muy poco que e aprendido como decimos aca a sido a huevo, leyendo, probando etc.
Apenas pueda are el script y espero contar con su ayuda por si me atasco en un error, aprovechando la respuesta, estos desatendidos son para dos WPI, uno para XP y otro para Win 7. lo hago asi porque los script que hago en Win 7 no me funcionan en el XP por un problema con el teclado o algo asi, ejemplo mis script en XP deben tener esto (v3.3.9.5 KeyboardLayout=0000040A) --- si lo ejecuto el script en Win 7 me sale una advertencia o error que me pausa el script diciéndome algo de que en Win 7 ocupo el valor numérico o eso entiendo yo de teclado (v3.3.9.5 KeyboardLayout=0000080A) ---, todo es cambiar en los script el 8 por un 4 para XP y viceversa para Win 7, (que lio me hecho explicando) habría forma de que el script sirviera en ambos windows sin este error? es decir eliminando ese código del script (v3.3.9.5 KeyboardLayout=0000040A) --- y asi solo tener que hacer un solo WPI?
No se pero presiento que su respuesta sera que quite el au3record de la ecuación XD.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Problema con el cierrre de un programa desatendido

Mensaje por Chefito »

Mira la macro en la ayuda @osversion. Esa macro te da que windows tienes y podrás tratar cualquier cosa con un simple if....then.... .

Código: Seleccionar todo

If @OSVersion="WIN_XP" Then
   ; aquí entraría si el windows es xp
Else
   ;aquí entraría cualquier otro windows....7, 8, etc
EndIf
Pon dentro lo que quieras y ya está.
Y por supuesto, te sigo recomendando que leas más la ayuda y el foro y aprendas más de autoit, porque el au3record es un script bueno al principio para aprender y hacer pequeños script, pero es muy limitado. Yo creo que nunca lo llegé a utilizar :smt003 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder