Applescript: recupero dell'elenco di finestre di visibilità visibile (finestre visualizzate sul desktop)

3

Sto cercando di ottenere l'elenco delle finestre visibili, cioè le finestre mostrate sul desktop e non ridotte al minimo.

Quindi, ho questo script che mi dà l'elenco corrotto dei processi che sono in esecuzione e hanno una finestra associata ad esso. Ma non sono in grado di ottenere l'id delle finestre visibili associate a questi processi.

Ecco lo 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}

Puoi provare questo in editor di script, ma offre sempre una lista vuota.

Qualsiasi aiuto / suggerimento sarebbe molto apprezzato.

    
posta bhavya_w 14.09.2016 - 15:25
fonte

1 risposta

3

Ho modificato il codice , apportando le modifiche necessarie per eseguire almeno (lavoro) tramite il codice per raccogliere le informazioni, aggiungendo qualche codice aggiuntivo per gestire la segnalazione di più di un messaggio avendo un separatore tra di loro. Tuttavia, puoi cambiarlo in qualcosa di diverso da quello che ho creato.

Ciò detto, però, l'output per visibleWindows è solo una stringa di numeri che rappresentano il% concatenato di% co_de, poiché è così che viene scritto in output. Non sono sicuro se questo è l'output che ti aspettavi, tuttavia se il codice che hai scritto fosse stato pubblicato, il risultato sarebbe stato lo stesso per ciò che è stato restituito per id .

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

Nel codice qui sopra, se cambi visibleWindows in set visibleWindows to "" , allora set visibleWindows to {} restituisce come un elenco di visibleWindows 's non solo una stringa di numeri.

Se cambi anche:

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)

Ottieni il nome dell'applicazione seguito da un elenco di id della sua finestra, quindi almeno i dati restituiti hanno più senso, quindi solo una stringa di numeri o un elenco di id che non conosce che appartiene a cosa .

La linea di fondo è, prendi la id separatamente e poi lascia che l' applicazione non il processo ottenga il listOfProcesses e lo faccia al di fuori degli "Eventi di sistema" "Blocco id . Ogni combinazione che ho provato mentre lasciavo il codice rimanente all'interno del blocco "% degli eventi di sistema" tell non è riuscita. Così ho spostato il resto di esso al di fuori di esso e ho cambiato tell in tell process e ha funzionato. Poi ho ottimizzato un po 'il codice .

    
risposta data 15.09.2016 - 00:12
fonte

Leggi altre domande sui tag