¿Hay alguna manera de detectar qué programa está robando el enfoque en mi Mac?

22

Tengo un problema con alguna aplicación en mi Mac que roba el foco del teclado (la barra de título de la ventana actual se vuelve inactiva). Sin embargo, en realidad no es una ventana propia o una barra de menú propia, y no responde de manera identificable a los atajos de teclado.

¿Hay una manera de determinar qué aplicación tiene el foco del teclado incluso si es una de las que no tiene barra de menú o icono de Dock? Sé de una característica incorporada que casi lo hace ; el cuadro de diálogo Forzar salida, si se invoca desde el teclado, se abrirá con la aplicación seleccionada seleccionada. Sin embargo, solo enumera las aplicaciones normales de has-a-dock-icon, por lo que no ayuda en este caso.

Esto comenzó a ocurrir alrededor del momento en que actualicé de 10.8 a 10.9; Sospecho que una de las aplicaciones que ya había instalado, o que he actualizado junto con el sistema operativo, se está comportando mal.

Estoy abierto a soluciones que impliquen una pequeña cantidad de programación (o AppleScript, digamos), uso de herramientas de desarrollo, etc .; pero no como "Desinstalar cosas hasta que desaparezcan" porque eso sería excesivamente perjudicial en este momento. Me gustaría identificar definitivamente la aplicación y presentar un informe de error o corregir su configuración.

Mi investigación solo ha mostrado un par de subprocesos que solicitan lo mismo en las Comunidades de soporte de Apple que no contenían una respuesta.

    
pregunta Kevin Reid 09.03.2014 - 21:30

4 respuestas

21

Puede encontrar la aplicación que roba el enfoque guardando el siguiente código en un archivo find_focus_stealer.py y ejecutándolo a través de python find_focus_stealer.py en una terminal.

Comience a ejecutar el script: imprimirá el nombre de la aplicación activa cada 3 segundos. Siga trabajando como siempre, espere a que ocurra el problema y, después de unos segundos, vea la salida en el terminal. Tendrás a tu culpable.

En mi caso, fue una aplicación de fondo de 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

Créditos a iMichael_ en este hilo de discusiones de Apple .

    
respondido por el Ace 02.10.2014 - 22:45
12

Aquí hay una pequeña actualización de secuencia de comandos de @Asa que se ejecuta hasta que la eliminas y solo imprime el nombre de la aplicación cuando cambia. De nuevo, guarde este código en un archivo find_focus_stealer.py y luego intente ejecutarlo 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)

Pude usar esto para rastrear a "Google Drive" como el culpable de robo de enfoque en mi Mac.

    
respondido por el medmunds 06.02.2015 - 01:40
0

¿Quizás verifique el Monitor de actividad para ver los procesos activos? Cualquier cosa en el estado de la siesta de la aplicación podría descartarse fácilmente, y podría acortar mucho la caza.

    
respondido por el Rax 09.03.2014 - 21:35
0

Aquí hay una versión mejorada del script que se menciona en la respuesta de @Asa :

#!/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)

Imprimirá el nombre de la aplicación activa que tiene el enfoque y detectará si cambió al verificar cada segundo.

Secuencia de comandos relacionada: Identifique qué aplicación o proceso está robando el enfoque en OSX en Gist

Uso:

  1. Guarde el script anterior en un archivo get_active_focus.py .
  2. Asigne atributos de ejecución con el comando chmod +x get_active_focus.py .
  3. Ejecuta el archivo con ./get_active_focus.py .

Salida:

$ ./get_active_focus.py
Active focus: Terminal
Focus changed to: Google Chrome
    
respondido por el kenorb 28.05.2017 - 17:58

Lea otras preguntas en las etiquetas