Applescript: Obtención de la lista de identificaciones de ventanas visibles (ventanas que se muestran en el escritorio)

3

Estoy intentando obtener la lista de ventanas visibles, es decir, las ventanas que se muestran en el escritorio y no están minimizadas.

Por lo tanto, ahora tengo este script que me da la lista más correcta de los procesos que se están ejecutando y tiene una ventana asociada. Pero no puedo obtener el ID de las ventanas visibles asociadas con estos procesos.

Aquí está el script:

set visibleWindows to ""
set message to ""

tell application "System Events"
    set listOfProcesses to (name of every process where background only is false)
    repeat with visibleProcess in listOfProcesses
        try
            tell process visibleProcess to set visibleWindows to visibleWindows & (id of windows whose visible is true)
        on error someError
            set message to "Some error occured :" & someError
        end try
    end repeat
end tell

return {visibleWindows, listOfProcesses, message}

Puedes intentar esto en el editor de secuencias de comandos, pero siempre da una lista vacía.

Cualquier ayuda / sugerencia sería muy apreciada.

    
pregunta bhavya_w 14.09.2016 - 15:25

1 respuesta

3

He modificado su código , realizando los cambios necesarios para que al menos ejecute (trabajo) a través del código para recopilar la información. mientras agrega algún código adicional para manejar los informes de más de un mensaje al tener un separador entre ellos. Sin embargo, puedes cambiarlo por otro que no sea el que hice.

Dicho esto, sin embargo, la salida para el visibleWindows es solo una cadena de números que representan los id concatenados, ya que así es como se escribe en la salida. No estoy seguro de si esa es la salida que esperaba, sin embargo, si el código , tal como lo escribió, se había ejecutado, el resultado habría sido el mismo para lo que se devolvió para visibleWindows .

on run
    set visibleWindows to ""
    set message to ""

    tell application "System Events"
        set listOfProcesses to (name of every process where background only is false)
    end tell

    repeat with visibleProcess in listOfProcesses
        try
            tell application visibleProcess to set visibleWindows to visibleWindows & (id of windows whose visible is true)
        on error someError
            set message to message & "Some error occurred: " & someError & "; "
        end try
    end repeat

    return {visibleWindows, listOfProcesses, message}
end run

En el código anterior, si cambia de set visibleWindows to "" a set visibleWindows to {} , entonces visibleWindows devuelve como una lista de id 's no solo una cadena de números.

Si también cambias:

tell application visibleProcess to set visibleWindows to visibleWindows & (id of windows whose visible is true)

Para:

tell application visibleProcess to set visibleWindows to visibleWindows & visibleProcess & (id of windows whose visible is true)

Obtienes el nombre de la aplicación seguido de una lista de id de su ventana, por lo que al menos los datos devueltos tienen más sentido, luego solo una cadena de números o una lista de id 's que no saben que pertenece a what .

La conclusión es, obtenga listOfProcesses por separado y luego deje que application no el process obtenga id y hágalo fuera de "Eventos del sistema " tell bloque. Todas las combinaciones que probé mientras dejaba el código restante dentro del bloque de "Eventos del sistema" tell fallaron. Así que moví el resto fuera de él y cambié de tell process a tell application y funcionó. Luego ajusté un poco el código .

    
respondido por el user3439894 15.09.2016 - 00:12

Lea otras preguntas en las etiquetas