3 votes

Applescript : Obtenir la liste des identifiants des fenêtres visibles (fenêtres affichées sur le bureau)

J'essaie d'obtenir la liste des fenêtres visibles, c'est-à-dire les fenêtres qui sont affichées sur le bureau et non réduites.

Jusqu'ici, j'ai ce script qui me donne la liste correst des processus qui sont en cours d'exécution et auxquels est associé un Windows. Mais je ne suis pas capable d'obtenir les id des Windows visibles associés à ces processus.

Voici le 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}

Vous pouvez essayer ceci dans l'éditeur script mais cela donne toujours une liste vide.

Toute aide/suggestion serait très appréciée.

3voto

user3439894 Points 52496

J'ai modifié votre code en effectuant les changements nécessaires pour qu'il fonctionne au moins (travail) à travers le code pour rassembler les informations, tout en ajoutant quelques code pour gérer la déclaration de plus d'un message en les séparant par un séparateur. Cependant, vous pouvez le changer en quelque chose d'autre que ce que j'ai fait.

Cela dit, la sortie pour le visibleWindows est juste une chaîne de nombres représentant la concaténation de id car c'est ainsi qu'il est écrit en sortie. Je ne suis pas sûr que ce soit la sortie que vous attendiez, cependant si le fichier code tel que vous l'avez écrit, le résultat aurait été le même pour ce qui est retourné pour 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

Dans le code ci-dessus, si vous modifiez set visibleWindows to "" à set visibleWindows to {} alors visibleWindows retourne une liste des id n'est pas seulement une chaîne de chiffres.

Si vous changez aussi :

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

A :

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

Vous obtenez le nom de l'application suivi d'une liste des fenêtres de l'application. id Ainsi, les données renvoyées ont au moins plus de sens qu'une simple chaîne de chiffres ou une liste de chiffres. id de ne pas savoir dont appartient à ce que .

L'essentiel est d'obtenir le listOfProcesses séparément et ensuite laisser le application pas le processus obtenir le id et le faire en dehors des "événements système". tell bloc. Toutes les combinaisons que j'ai essayées en laissant le reste code dans le cadre des "événements du système". tell Le bloc a échoué. Donc j'ai déplacé le reste à l'extérieur de celui-ci et changé tell process à tell application et ça a marché. Ensuite, j'ai modifié le code un peu.

0 votes

Il a très bien fonctionné.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X