Ayuda básica maximizar y minimizar ventanas

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
chriszga
Mensajes: 9
Registrado: 12 Mar 2014, 20:36

Ayuda básica maximizar y minimizar ventanas

Mensaje por chriszga »

:smt010 :smt010 :smt010 Hola, soy nuevo en el foro.
Tengo una duda que no he podido solucionar siendo muy facil y el problema es el siguiente...
Tengo 2 ventanas de microsoft Excel 2007 abiertas y minimizadas en la barra de tareas, una se llama "Numero 1" y la otra "Numero 2"..
la idea es que al iniciar el programa autoit3 me reconozca primero "Numero 1" y lo maximice, para luego minimizarlo y despues maximice el "Numero 2" y lo minimice.
con el "Numero 1" todo bien, eso lo puedo hacer ocupando este scrip:
WinActivate("Microsoft Excel - Numero 1")
_WinWaitActivate("Microsoft Excel - Numero 1","")
WinSetState("Microsoft Excel - Numero 1", "", @SW_MAXIMIZE)
Sleep(2000)
WinSetState("Microsoft Excel - Numero 1", "", @SW_MINIMIZE)

pero el problema aparece cuando trato hacer ese mismo scrip para el "Numero 2", me pude dar cuenta que el programa funciona muy bien con carpetas, pero con archivos como en este caso el microsoft excel, solo puede reconocer 1 solo de 2 archivos abiertos.
Por favor si alguen me puede ayudar estaría muy agradecido.
Saludos.
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por PDF »

Hola y Bienvenido..

Puedes probar utilizando el parametro 3 para WinTitleMatchMode esto haría que coincida el titulo exacto para las ventanas ya que por defecto, Autoit busca la primera coincidencia, prueba añadiendo esto "Opt("WinTitleMatchMode",3)" al principio del script que llevas, así:

Código: Seleccionar todo

Opt("WinTitleMatchMode",3)
WinActivate("Microsoft Excel - Numero 1")
_WinWaitActivate("Microsoft Excel - Numero1","")
WinSetState("Microsoft Excel - Numero 1", "",@SW_MAXIMIZE)
WinSetState("Microsoft Excel - Numero 1", "",@SW_MINIMIZE)
Sleep(2000) ; eperar 2 segundos

WinActivate("Microsoft Excel - Numero 2")
_WinWaitActivate("Microsoft Excel - Numero2","")
WinSetState("Microsoft Excel - Numero 2", "",@SW_MAXIMIZE)
WinSetState("Microsoft Excel - Numero 2", "",@SW_MINIMIZE)
Tienes que tener en cuenta que debe ser el titulo exacto
Saludos.. Y para lo que necesites, estamos aquí..
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por Dany »

@PDF:
Por lógica yo lo vi como dices y debería funcionar. pero por alguna razón no funciona a veces no activa la ventana. entonces la solución que conseguí fue enviar WinActivate($hWnd1) 2 veces.

saludos



Hola chriszga, Bienvenido(a), la verdad no suelo Atomatizar nada con AutoIt. pero la solucion que consegui para que funcione es esta.

Código: Seleccionar todo

Opt("WinTitleMatchMode", 3)     ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase




Local $hWnd1 = WinGetHandle("Numero 1")
Local $hWnd2 = WinGetHandle("Numero 2")
ConsoleWrite("Handle 1=" & $hWnd1 & @crlf)
ConsoleWrite("Handle 2=" & $hWnd2 & @crlf)
WinActivate($hWnd1) ;Ventana Numero 1
WinActivate($hWnd1) ;Ventana Numero 1
WinSetState("[ACTIVE]","",@SW_MAXIMIZE)
Sleep(1000)
WinSetState("[ACTIVE]","",@SW_MINIMIZE)
Sleep(1000)
WinActivate($hWnd2) ;Ventana Numero 2
WinActivate($hWnd2) ;Ventana Numero 2
WinSetState("[ACTIVE]","",@SW_MAXIMIZE)
Sleep(1000)
WinSetState("[ACTIVE]","",@SW_MINIMIZE)
proba y me contas.


Saludos
  • ............................................Imagen
    ......................................Imagen
chriszga
Mensajes: 9
Registrado: 12 Mar 2014, 20:36

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por chriszga »

Buenas tardes a todos los del foro autoit :smt024 :
el que me funciono fue el del usuario "Dany", pero funciona un poco extraño ya que a veces maximiza el "Numero 1" dos veces y otras veces funciona excelente y debido a esto no me sirve. Tambien, al ejecutarlo junto a otro archivo excel, es decir, tener minimizado en la barra de tareas 3 archivos excel, para este caso el "Numero 1", "Numero 2" y uno llamado "Numero 3", al ejecutar tu programa, este no reconoce el nombre del excel a maximizar, por lo que me pude dar cuenta que al maximizar y minimizar algun excel por ejemplo el "Numero 3" antes de ejecutar tu programa, y luego ejecuto tu programa, este maximiza y minimiza solamente el que maximice y minimice manualmente antes de ejecutar tu programa.
Siendo tan basico y simple lo que quiero hacer, no funciona, ojala alguen me pueda ayudar... :smt022
De todos modos se agradece su respuesta y ayuda inmediata.
Saludos :smt001
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por Dany »

Si, realmente parece fácil y por lógica debería funcionar pero por alguna razón no funciona. voy a revisar otra vez a ver si logro dar con la solución.

Saludos
  • ............................................Imagen
    ......................................Imagen
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por Chefito »

Si tienes problemas con las funciones típicas de windows para tratar ventanas, ya sea porque se hace un lío al ser de la misma clase o quien sabe por que, podéis obtener el objeto excel para recuperar los libros que ya están cargados en windows (en este caso creo entender que es eso), y trabajar con sus propiedades, métodos y eventos directamente desde AutoIt. Recordar que también se pueden crear objetos excel y, por ejemplo, cargar los libros desde el script....pero bueno, eso es otra historia. Vamos a lo que se pregunta. Un ejemplo con comentarios:

Código: Seleccionar todo

Global Const $xlMaximized=-4137		;Maximized
Global Const $xlMinimized=-4140		;Minimized
Global Const $xlNormal=-4143		;Normal


$oExcel = ObjGet("", "Excel.Application")	;obtengo el objeto excel que se encuentren cargados en windows

$oExcel.Application.visible=1		;con esto, visiono el libro excel, aunque esté ya maximizada detrás de otras ventanas.
;~ $oExcel.Application.Workbooks('Numero 3.xlsx').activate		;se puede utilizar el nombre del libro (nombre del archivo) para trabajar directamente con él y ser más exacto.
$oExcel.Application.Workbooks(1).activate		;activo el libro Numero 1. Se puede utilizar lo anterior en vez de el libro número 1 según su orden de carga.
$oExcel.Application.WindowState= $xlMaximized		;Maximizo el libro Numero 1
Sleep(2000)
;~ $oExcel.Application.visible=1
$oExcel.Application.Workbooks(1).activate
$oExcel.Application.WindowState= $xlMinimized
Sleep(2000)
$oExcel.Application.visible=1
$oExcel.Application.Workbooks(2).activate
$oExcel.Application.WindowState= $xlMaximized
Sleep(2000)
;~ $oExcel.Application.visible=1
$oExcel.Application.Workbooks(2).activate
$oExcel.Application.WindowState= $xlMinimized

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 ;).
wbueso
Aprendiz de Mago
Mensajes: 61
Registrado: 31 Dic 2013, 01:02

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por wbueso »

Esto es lo que pude lograr con lo poco que entendi, en la yuda de autoit me base, y tome el que envio Chefito como muestra.

Código: Seleccionar todo

#include <Excel.au3>

Global Const $xlMaximized=-4137
Global Const $xlMinimized=-4140
;Global Const $xlNormal=-4143


$oExcel = ObjGet("", "Excel.Application")   ;obtengo el objeto excel que se encuentren cargados en windows

$oExcel.Application.visible=1      ;con esto, visiono el libro excel, aunque esté ya maximizada detrás de otras ventanas.
Sleep(1000)
;~ $oExcel.Application.Workbooks('Numero 3.xlsx').activate      ;se puede utilizar el nombre del libro (nombre del archivo) para trabajar directamente con él y ser más exacto.
;$oExcel.Application.Workbooks("Numero1").activate ;activo el libro Numero 1. Se puede utilizar lo anterior en vez de el libro número 1 según su orden de carga.
_ExcelSheetActivate($oExcel, "Numero1")
Sleep(1000)
;$oExcel.Application.WindowState= $xlMaximized      ;Maximizo el libro Numero 1
;Sleep(2000)
 $oExcel.Application.visible=1
;$oExcel.Application.Workbooks('Numero1').activate
;Sleep(2000)
$oExcel.Application.WindowState= $xlMinimized
;Sleep(2000)
;$oExcel.Application.visible=1
;$oExcel.Application.Workbooks('Numero2').activate

Sleep(1000)
$oExcel.Application.WindowState= $xlMaximized
Sleep(1000)
_ExcelSheetActivate($oExcel, "Numero2")
 ;$oExcel.Application.visible=1
;$oExcel.Application.Workbooks('Numero2').activate
Sleep(1000)
$oExcel.Application.WindowState= $xlMinimized
chriszga
Mensajes: 9
Registrado: 12 Mar 2014, 20:36

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por chriszga »

Gracias por sus respuestas y posibles soluciones, pero para ser sincero probé todas y ninguna funciono :smt009 . Analice las lineas de programación y los comentarios de las mismas, pero aun no entiendo la razón de que no detecte la ventana por el mismo nombre, a mi parecer creo que es un grabe problema dentro del programa autoit.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por Chefito »

Mi código funciona perfectamente en mi ordenador, que consta de windows 7 y excell 2007. No se que puede ocurrirte. Si alguien prueba mi código con el mismo nombre en las hojas excell que ponen en mi programa, que diga si le funciona o no.

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 ;).
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Ayuda básica maximizar y minimizar ventanas

Mensaje por PDF »

Hola de nuevo a todos..

Este problema de maximizar y minimizar ventanas de Excel tal vez este en utilizar el titulo exacto de la ventana ya que utilizamos Opt("WinTitleMatchMode",3). En mi caso este simple código funciona perfectamente:

Código: Seleccionar todo

Opt("WinTitleMatchMode",3)
WinActivate("Numero 1.xlsx - Microsoft Excel")
WinSetState("Numero 1.xlsx - Microsoft Excel", "",@SW_MAXIMIZE)
WinSetState("Numero 1.xlsx - Microsoft Excel", "",@SW_MINIMIZE)
Sleep(2000) ; esperar 2 segundos

WinActivate("Numero 2.xlsx - Microsoft Excel")
WinSetState("Numero 2.xlsx - Microsoft Excel", "",@SW_MAXIMIZE)
WinSetState("Numero 2.xlsx - Microsoft Excel", "",@SW_MINIMIZE)
Solo que las ventanas "Numero 1.xlsx - Microsoft Excel" y "Numero 2.xlsx - Microsoft Excel" deben estar abiertas y deben tener ese titulo exacto...
Chefito escribió:Mi código funciona perfectamente en mi ordenador, que consta de windows 7 y excell 2007. No se que puede ocurrirte. Si alguien prueba mi código con el mismo nombre en las hojas excell que ponen en mi programa, que diga si le funciona o no.
El código que propone Chefito también funciona, cabe mencionar que utilizo Windows 8 y el Office 2013, es otra forma más compleja de hacerlo utilizando métodos y eventos :smt017

Saludos
Responder