Apakah ada cara untuk mendeteksi program apa yang mencuri fokus pada Mac saya?

23

Saya punya masalah dengan beberapa aplikasi di Mac saya mencuri fokus keyboard (bilah judul jendela saat ini menjadi tidak aktif). Namun, sebenarnya tidak memasang jendela atau bilah menu sendiri, dan tidak merespons pintasan keyboard yang dapat diidentifikasi.

Apakah ada cara untuk menentukan aplikasi apa yang memiliki fokus keyboard walaupun itu salah satu aplikasi yang tidak memiliki bilah menu atau ikon Dock? Saya tahu satu fitur bawaan yang hampir melakukan ini; dialog Force Quit, jika dipanggil dari keyboard, akan terbuka dengan aplikasi fokus dipilih. Namun, ini hanya mencantumkan aplikasi ikon-dermaga-normal, sehingga tidak membantu dalam kasus ini.

Ini mulai terjadi sekitar waktu saya memutakhirkan dari 10,8 menjadi 10,9; Saya menduga bahwa salah satu aplikasi yang telah saya instal, atau tingkatkan bersamaan dengan OS, baru saja mengalami gangguan.

Saya terbuka untuk solusi yang melibatkan sejumlah kecil pemrograman (atau AppleScript, katakanlah), penggunaan alat pengembang, dll .; tetapi tidak yang seperti "Copot pemasangan sampai hilang" karena itu akan sangat mengganggu saat ini. Saya ingin mengidentifikasi aplikasi dan mengajukan laporan bug atau memperbaiki konfigurasinya.

Penelitian saya hanya menghasilkan beberapa utas yang meminta hal yang sama di Komunitas Dukungan Apple yang tidak berisi jawaban.

Kevin Reid
sumber
Saya melihat ini juga. 10.9.4. Mungkin berbagi aplikasi utama yang saya jalankan dapat menyoroti kesamaan? Chrome, Firefox, Safari, Wuala, Dropbox, Nitrous, 1Password, Google Hangouts, Evernote, Skitch, Google drive, Mesin Waktu, Agen Stasiun Pangkalan Bandara, Agen Transfer File Android. Kalau tidak ... tidak ada solusi mudah yang saya tahu. Kecurigaan saya adalah G Hangouts.
JezC

Jawaban:

21

Anda dapat menemukan aplikasi yang mencuri fokus dengan menyimpan kode berikut dalam find_focus_stealer.pyfile dan menjalankannya melalui python find_focus_stealer.pyterminal.

Mulai jalankan skrip - itu akan mencetak nama aplikasi yang aktif setiap 3 detik. Tetap bekerja seperti biasa, tunggu sampai masalah terjadi, dan setelah beberapa detik lihat output di terminal. Anda akan memiliki pelakunya.

Dalam kasus saya itu adalah aplikasi latar belakang 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

Penghargaan untuk iMichael_ di utas Diskusi Apple ini .

Kartu as
sumber
Saya mencoba skrip ini. Anehnya, setiap kali pencurian terjadi, skrip berhenti berjalan. Pernyataan log terakhir di jendela tidak berbeda dari pernyataan log sebelumnya, yaitu tidak ada penyebab yang jelas. Script keluar begitu saja, tidak ada kesalahan.
Diodeus - James MacFarlane
2
Program python ini bekerja dengan baik, tetapi saya harus menggunakan Apple Installed Python. Saya telah membuat bir Python 2.7.8 dan modul AppKit tidak termasuk. Juga di komputer saya aplikasi yang menyinggung adalah: SymUIAgent.app Menu Cepat Symantec.
Cameron Goodale
2
@Diodeus alasan mengapa ini keluar bukan karena aplikasi yang mencuri fokus mengakhirinya, tetapi karena ini ditulis untuk hanya berjalan selama 100 detik. Untuk membuatnya berjalan sampai saya menekan Ctrl + c di jendela terminal saya berubah for i in t:menjadiwhile 1:
CenterOrbit
1
Bagus! Bagi saya, itu Google Drive.app. Saya melakukan sedikit pembaruan pada skrip Anda yang akan saya posting di jawaban yang terpisah. Terima kasih!
medmunds
1
jika Anda temui no module named appkit, maka jalankan easy_install pipdan pip install pyobjc. Bagi saya itu Google Drivemencuri fokus saya
mihai
14

Berikut sedikit pembaruan pada skrip @ Ace yang berjalan hingga Anda membunuhnya dan hanya mencetak nama aplikasi saat itu berubah. Sekali lagi, simpan kode ini dalam file find_focus_stealer.pydan kemudian coba jalankan dengan 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)

Saya bisa menggunakan ini untuk melacak "Google Drive" sebagai penyebab mencuri fokus di Mac saya.

medmunds
sumber
Pertunjukan yang bagus, tuan!
Bruno Bronosky
Ini berhasil untuk saya. Dalam kasus saya, aplikasi pencuri fokus adalah BetterTouchTool versi 2.636.
Rory O'Kane
1

Ini adalah versi skrip yang disempurnakan yang disebutkan dalam jawaban @ Ace :

#!/usr/bin/python
# Prints current window focus.
# See: /apple//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)

Ini akan mencetak nama aplikasi aktif yang memiliki fokus dan akan mendeteksi jika itu berubah dengan memeriksa setiap detik.

Skrip terkait: Identifikasi aplikasi atau proses mana yang mencuri fokus pada OSX di Gist

Pemakaian:

  1. Simpan skrip di atas ke dalam file get_active_focus.py .
  2. Tetapkan atribut eksekusi dengan chmod +x get_active_focus.py perintah.
  3. Jalankan file dengan ./get_active_focus.py .

Keluaran:

$ ./get_active_focus.py
Active focus: Terminal
Focus changed to: Google Chrome
kenorb
sumber
0

Mungkin memeriksa Activity Monitor untuk proses aktif? Apa pun dalam keadaan Aplikasi Nap dapat dengan mudah dikesampingkan, dan itu mungkin membuat perburuan jauh lebih pendek.

Rax
sumber
Ya, itu akan menjadi cara menginformasikan dugaan tentang apa masalahnya, tetapi saya sedang mencari sesuatu yang benar-benar mendapatkan informasi secara langsung.
Kevin Reid