C'è un modo per scoprire quale programma sta rubando l'attenzione sul mio Mac?

22

Ho riscontrato un problema con alcune app sul mio Mac che rubano lo stato attivo della tastiera (la barra del titolo della finestra corrente diventa inattiva). Tuttavia, in realtà non sta installando alcuna finestra o barra dei menu, e non risponde in modo identico alle scorciatoie da tastiera.

C'è un modo per determinare quale applicazione ha il focus della tastiera anche se è uno di quelli che non ha la barra dei menu o l'icona del Dock? Conosco una funzione incorporata che fa quasi questo ; la finestra di dialogo Uscita forzata, se richiamata dalla tastiera, si aprirà con l'applicazione focalizzata selezionata. Tuttavia, elenca solo le normali applicazioni has-a-dock-icon, quindi non aiuta in questo caso.

Ciò è iniziato nel momento in cui ho eseguito l'aggiornamento da 10.8 a 10.9; Ho il sospetto che una delle app che ho già installato o aggiornato insieme al sistema operativo, si sia comportata in modo anomalo.

Sono aperto a soluzioni che implicano una piccola quantità di programmazione (o AppleScript, ad esempio), l'uso di strumenti di sviluppo, ecc .; ma non quelli come "Disinstalla le cose fino a quando non sparisce" perché ciò sarebbe eccessivamente distruttivo al momento. Mi piacerebbe identificare definitivamente l'applicazione e presentare un bug report o correggere la sua configurazione.

La mia ricerca ha generato solo un paio di thread che richiedevano lo stesso su Comunità di supporto Apple che non contenevano una risposta.

    
posta Kevin Reid 09.03.2014 - 21:30
fonte

4 risposte

21

Puoi trovare l'app che ruba lo stato attivo salvando il seguente codice in un file find_focus_stealer.py e eseguendolo tramite python find_focus_stealer.py in un terminale.

Inizia a eseguire lo script: stamperà il nome dell'app attiva ogni 3 secondi. Continua a lavorare come al solito, attendi che il problema si verifichi e dopo qualche secondo vedi l'output nel terminale. Avrai il tuo colpevole.

Nel mio caso si trattava di un'app di sfondo di Symantec Antivirus (SymUIAgent.app).

#!/usr/bin/python

from AppKit import NSWorkspace
import time
t = range(1,100)
for i in t:
    time.sleep(3)
    activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
    print activeAppName

Crediti per iMichael_ in questo thread Discussioni Apple .

    
risposta data 02.10.2014 - 22:45
fonte
12

Ecco un piccolo aggiornamento di lo script @ Ace che viene eseguito fino a quando non lo uccidi e stampa solo il nome dell'app quando cambia. Ancora una volta, salva questo codice in un file find_focus_stealer.py e prova a eseguirlo con python find_focus_stealer.py .

#!/usr/bin/python                                                                                                       

try:
    from AppKit import NSWorkspace
except ImportError:
    print "Can't import AppKit -- maybe you're running python from brew?"
    print "Try running with Apple's /usr/bin/python instead."
    exit(1)

from datetime import datetime
from time import sleep

last_active_name = None
while True:
    active_app = NSWorkspace.sharedWorkspace().activeApplication()
    if active_app['NSApplicationName'] != last_active_name:
        last_active_name = active_app['NSApplicationName']
        print '%s: %s [%s]' % (
            datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            active_app['NSApplicationName'],
            active_app['NSApplicationPath']
        )
    sleep(1)

Sono stato in grado di utilizzarlo per rintracciare "Google Drive" come colpevole di furto di focus sul mio Mac.

    
risposta data 06.02.2015 - 01:40
fonte
0

Forse controllare Activity Monitor per i processi attivi? Qualsiasi cosa nello stato App Nap potrebbe essere facilmente esclusa e potrebbe rendere la caccia molto più breve.

    
risposta data 09.03.2014 - 21:35
fonte
0

Ecco la versione migliorata dello script citato in la risposta di @ Ace :

#!/usr/bin/python
# Prints current window focus.
# See: https://apple.stackexchange.com/q/123730
from AppKit import NSWorkspace
import time
workspace = NSWorkspace.sharedWorkspace()
active_app = workspace.activeApplication()['NSApplicationName']
print('Active focus: ' + active_app)
while True:
    time.sleep(1)
    prev_app = active_app
    active_app = workspace.activeApplication()['NSApplicationName']
    if prev_app != active_app:
        print('Focus changed to: ' + active_app)

Stampa il nome dell'applicazione attiva che ha lo stato attivo e rileva se è cambiata controllando ogni secondo.

Script correlato: Identifica quale app o processo sta rubando il focus su OSX su Gist

Utilizzo:

  1. Salva lo script precedente in un file get_active_focus.py .
  2. Assegna gli attributi di esecuzione con il comando chmod +x get_active_focus.py .
  3. Esegui il file con ./get_active_focus.py .

Output:

$ ./get_active_focus.py
Active focus: Terminal
Focus changed to: Google Chrome
    
risposta data 28.05.2017 - 17:58
fonte

Leggi altre domande sui tag