Applescript: Liste der IDs der sichtbaren Fenster abrufen (Fenster werden auf dem Desktop angezeigt)

3

Ich versuche, die Liste der sichtbaren Fenster abzurufen, d. H. Der Fenster, die auf dem Desktop angezeigt und nicht minimiert werden.

Bisher habe ich dieses Skript, das mir die entsprechende Liste der ausgeführten Prozesse und ein damit verknüpftes Fenster anzeigt. Aber ich bin nicht in der Lage, die IDs der sichtbaren Fenster zu erhalten, die mit diesen Prozessen verbunden sind.

Hier ist das Skript:

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}

Sie können dies im Skripteditor versuchen, es wird jedoch immer eine leere Liste angezeigt.

Jede Hilfe / Anregungen wäre sehr dankbar.

bhavya_w
quelle

Antworten:

3

Ich habe deine geändert Code Nehmen Sie die erforderlichen Änderungen vor, damit es zumindest ausgeführt wird (Arbeit) durch die Code um die Informationen zu sammeln, während Sie einige zusätzliche hinzufügen Code das Melden von mehr als einer Nachricht durch ein Trennzeichen zwischen ihnen zu handhaben. Sie können es jedoch in etwas anderes ändern, als ich es gemacht habe.

Das heißt aber, die Ausgabe für die visibleWindows ist nur eine Folge von Zahlen, die die Verkettung darstellen id 's, wie es geschrieben ist, um auszugeben. Ich bin mir nicht sicher, ob das die Ausgabe ist, die Sie erwartet haben Code Wie Sie geschrieben haben, wäre das Ergebnis für das, wofür es zurückgegeben wurde, dasselbe gewesen 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

In dem Code oben, wenn Sie sich ändern set visibleWindows to "" zu set visibleWindows to {}, dann visibleWindows kehrt als Liste der zurück id ist nicht nur eine Folge von Zahlen.

Wenn Sie auch ändern:

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

Zu:

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

Sie erhalten den Namen der Anwendung, gefolgt von einer Liste der Fenster id, also machen zumindest die zurückgegebenen Daten mehr Sinn, als nur eine Folge von Zahlen oder eine Liste von id weiß es nicht welche gehört Was .

Die Quintessenz ist, erhalten Sie die listOfProcesses getrennt und dann die Anwendung nicht der verarbeiten bekommen das id und dies außerhalb der "System Events" tell Block. Jede Kombination habe ich ausprobiert, während ich die restlichen verlassen habe Code innerhalb der "System Events" tell Block fehlgeschlagen. Also habe ich den Rest davon rausgezogen und mich verändert tell process zu tell application und es hat funktioniert. Dann habe ich den optimiert Code es ein bisschen.

user3439894
quelle
Es hat super geklappt.
bhavya_w