Page 1 of 1
Obtener Identificador Ventana
Posted: 03 Oct 2023, 04:04
by BlackDraGoN
Me gustaria saber si lo siguiente seria correcto.
Code: Select all
Identificador_Ahk := ""
Run, %App% %Parametros%, , , Identificador_Ahk
WinGet, Identificador_Ahk, ID, ahk_id %Identificador_Ahk%
Identificador_Ahk .= ahk_id %Identificador_Ahk%
;Espero 5 segundos a que se abra la pantalla, sino espero a que el proceso del ejecutable exista.
WinWait, Identificador_Ahk, , 5
if ERRORLEVEL
Process, Wait, %App%, 5
........
........
Tengo un codigo con en el cual llamo a varias Apps, estoy usando WinWait, ahk_exe %App% pero no siempre me funciona, asi que quiero obtener el ID y usarlo,¿¿ lo de antes seria correcto, o que opcion me aconsejais??, tambien he usado Process, pero necesito que sea cuando la Ventana aparece, en caso de no aparecer, entonces uso Process, ya que hay algunas Apps que no generan Ventana.
Re: Obtener Identificador Ventana
Posted: 04 Oct 2023, 04:36
by BlackDraGoN
@sofista puedes ayudarme y decirme si hay otra forma mejor de hacer esto??
Re: Obtener Identificador Ventana Topic is solved
Posted: 04 Oct 2023, 18:47
by sofista
Lo que noto a primera vista es que en esta línea:
Code: Select all
Identificador_Ahk .= ahk_id %Identificador_Ahk%
se hace una concatenación
.= en vez de una asignación
:=, cuando entiendo —o mejor dicho, supongo— que se busca esto último.
Prueba del error:
Code: Select all
run, notepad.exe
WinGet, Identificador_Ahk, ID, A ; la ventana activa
Identificador_Ahk .= ahk_id %Identificador_Ahk%
if (Identificador_Ahk = ahk_id %Identificador_Ahk%)
MsgBox yes
else
MsgBox no
; MsgBox informa "no"
; Prueba de la asignación
Identificador_Ahk := ahk_id %Identificador_Ahk%
if (Identificador_Ahk = ahk_id %Identificador_Ahk%)
MsgBox yes
else
MsgBox no
; MsgBox informa "si"
Convendría, entonces, eliminar esa asignación que en realidad no hace nada y trabajar con el
hwnd obtenido en primera instancia. Probemos a ver qué pasa:
Code: Select all
run, notepad.exe
WinGet, Identificador_Ahk, ID, A ; la ventana activa
WinWait, ahk_id %Identificador_Ahk%,, 5
if ERRORLEVEL {
MsgBox, Se ha producido un error
return ; se termina el script y el siguiente MsgBox no se nuestra
}
MsgBox, No hubo error ; se muestra este mensaje
Re: Obtener Identificador Ventana
Posted: 05 Oct 2023, 01:23
by BlackDraGoN
sofista wrote: ↑04 Oct 2023, 18:47
Lo que noto a primera vista es que en esta línea:
Code: Select all
Identificador_Ahk .= ahk_id %Identificador_Ahk%
se hace una concatenación
.= en vez de una asignación
:=, cuando entiendo —o mejor dicho, supongo— que se busca esto último.
Perdona, es que al escribir no me di cuenta, realmente tengo la asignación
:=
Prueba del error:
Code: Select all
Convendría, entonces, eliminar esa asignación que en realidad no hace nada y trabajar con el [c]hwnd[/c] obtenido en primera instancia. Probemos a ver qué pasa:
[code]
run, notepad.exe
WinGet, Identificador_Ahk, ID, A ; la ventana activa
WinWait, ahk_id %Identificador_Ahk%,, 5
if ERRORLEVEL {
MsgBox, Se ha producido un error
return ; se termina el script y el siguiente MsgBox no se nuestra
}
MsgBox, No hubo error ; se muestra este mensaje
Una de mis preguntas es
WinGet, Identificador_Ahk, ID, A precedido de un
Run siempre va a devolver el ID del Run, se active o no la ventana del Run?? Si ejecuto el Run minimizado tambien devuelvera su ID?
Mil gracias de nuevo.
Re: Obtener Identificador Ventana
Posted: 05 Oct 2023, 06:54
by sofista
BlackDraGoN wrote: ↑05 Oct 2023, 01:23
Una de mis preguntas es
WinGet, Identificador_Ahk, ID, A precedido de un
Run siempre va a devolver el ID del Run, se active o no la ventana del Run?? Si ejecuto el Run minimizado tambien devuelvera su ID?
WinGet, Identificador_Ahk, ID, A devuelve el ID de la ventana activa. Ahora bien, si la ventana activa es minimizada deja de estar activa, por lo tanto, el comando
WinGet devolverá el ID de la ventana activa anterior. Podrías haber ganado tiempo y autorrespondido con un test, por ejemplo:
Code: Select all
Run, notepad.exe,, Min
WinGetActiveTitle, varTitle ; se guarda el título de la ventana activa
MsgBox, % varTitle ; la ventana activa no es "Sin título: Bloc de notas"
Agregado:
Este script obtiene el
Hwnd de una ventana minimizada, quizás sea útil para tu proyecto.