Obtener Identificador Ventana Topic is solved

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

BlackDraGoN
Posts: 39
Joined: 13 Nov 2022, 09:31

Obtener Identificador Ventana

03 Oct 2023, 04:04

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.
BlackDraGoN
Posts: 39
Joined: 13 Nov 2022, 09:31

Re: Obtener Identificador Ventana

04 Oct 2023, 04:36

@sofista puedes ayudarme y decirme si hay otra forma mejor de hacer esto??
sofista
Posts: 650
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Obtener Identificador Ventana  Topic is solved

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.

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
BlackDraGoN
Posts: 39
Joined: 13 Nov 2022, 09:31

Re: Obtener Identificador Ventana

05 Oct 2023, 01:23

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.
sofista
Posts: 650
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Obtener Identificador Ventana

05 Oct 2023, 06:54

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.

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 71 guests