Hangi programın Mac'ime odaklandığını tespit etmenin bir yolu var mı?


23

Mac'imdeki bazı uygulamalarda klavye odağını çalmakla ilgili bir sorunum var (mevcut pencerenin başlık çubuğu etkin değil). Bununla birlikte, aslında herhangi bir pencereyi veya menü çubuğunu açmıyor ve klavye kısayollarına özdeş bir şekilde yanıt vermiyor.

Menü çubuğuna veya Dock simgesine sahip olmayanlardan biri olsa bile klavyenin hangi uygulamaya odaklandığını belirlemenin bir yolu var mı? Neredeyse bunu yapan bir yerleşik özellik biliyorum; Klavyeden çağrılırsa Zorla Çık iletişim kutusu seçilen odaklanmış uygulama ile açılacaktır. Ancak, sadece normal bir dock-icon uygulamalarını listeler, bu durumda bu işe yaramaz.

Bu, 10,8'den 10,9'a yükselttiğim zaman ortaya çıktı. Zaten yüklediğim ya da işletim sistemi ile birlikte güncellediğim uygulamalardan birinin yeni yaramazlık olduğundan şüpheleniyorum.

Az miktarda programlama (veya AppleScript, örneğin), geliştirici araçlarının kullanımı, vb. İçeren çözümlere açığım; fakat “işleri yok olana kadar kaldır” gibi şeyler değil, çünkü şu anda aşırı derecede rahatsız edici olabilir. Uygulamayı kesin olarak tanımlamak ve bir hata raporu hazırlamak veya yapılandırmasını düzeltmek istiyorum.

Araştırmam, Apple Destek Toplulukları'nda aynı soruyu cevaplamayan birkaç konu ortaya çıkardı.


Bunu da görüyorum. 10.9.4. Belki de çalıştırdığım ana uygulamaları paylaşmak ortaklığı vurgulayabilir mi? Chrome, Firefox, Safari, Wuala, Dropbox, Azotlu, 1Password, Google Hangouts, Evernote, Skitch, Google sürücüsü, Time Machine, Havaalanı Baz İstasyonu Aracısı, Android Dosya Aktarım Aracısı. Aksi halde ... bildiğim kolay bir çözüm yok. Benim şüphem G Hangouts.
JezC

Yanıtlar:


21

Aşağıdaki kodu bir find_focus_stealer.pydosyaya kaydederek ve python find_focus_stealer.pybir terminalde çalıştırarak odağı çalan uygulamayı bulabilirsiniz .

Komut dosyasını çalıştırmaya başlayın - her 3 saniyede bir etkin uygulamanın adını yazdırır. Her zamanki gibi çalışmaya devam edin, sorunun oluşmasını bekleyin ve birkaç saniye sonra terminaldeki çıkışı görün. Suçlu tarafını alacaksın.

Benim durumumda bir Symantec Antivirus arka plan uygulaması (SymUIAgent.app) idi.

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

İçin Kredi iMichael_ içinde bu Apple Tartışmalar iplik .


Bu senaryoyu denedim. Garip, olay çalma her gerçekleştiğinde, senaryo çalışmayı durdurur. Penceredeki son log ifadesi önceki log ifadelerinden farklı değildir, yani açık bir suçlu yoktur. Komut sadece çıkar, hata yok.
Diodeus - James MacFarlane

2
Bu python programı harika çalıştı, ancak Apple Kurulu Python'u kullanmak zorunda kaldım. Python 2.7.8'i kurdum ve AppKit modülü dahil edilmedi. Ayrıca benim makinede rahatsız edici uygulama oldu: SymUIAgent.app Symantec Hızlı Menü.
Cameron Goodale

2
@Diodeus bu durumun çıkış nedenini, çalınan uygulamanın sonlandırdığı için değil, bunun yalnızca 100 saniyelik bir süre boyunca çalışması için yazılmasından kaynaklanmaktadır. Yapmak için ben o terminal penceresinde Ctrl + c düğmesine kadar değişti çalıştırmak for i in t:olmakwhile 1:
CenterOrbit

1
Güzel! Benim için Google Drive.app idi. Komut dosyanızı, ayrı bir cevapta göndereceğim küçük bir güncelleme yaptım. Teşekkürler!
medmunds,

1
Eğer karşılaşırsan no module named appkit, koş easy_install pipve ve pip install pyobjc. Benim için Google Drive
odağımı

14

Burada, siz öldürene kadar çalışan ve yalnızca uygulama değiştiğinde uygulama adını basan @ Ace'nin komut dosyası için yapılan küçük bir güncelleme var . Yine, bu kodu bir dosyaya kaydedin find_focus_stealer.pyve sonra çalıştırmayı deneyin 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)

Bunu, “Google Drive” ı Mac'imde en çok çalınan suçlu olarak izlemek için kullanabildim.


İyi şov efendim!
Bruno Bronosky 11:15

Bu benim için çalıştı. Benim durumumda odak çalma uygulaması BetterTouchTool sürüm 2.636 oldu .
Rory O'Kane

1

@ Ace'nin cevabında belirtilen betiğin geliştirilmiş versiyonu :

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

Odaklanan etkin uygulamanın adını yazdıracak ve her saniye kontrol ederek değiştirilip değiştirilmediğini tespit edecektir.

İlgili komut dosyası: Hangi uygulamanın veya işlemin Gist'te OSX'e odaklandığını çaldığını tanımlayın

Kullanımı:

  1. Yukarıdaki betiği bir dosyaya kaydedin get_active_focus.py.
  2. Komutla yürütme niteliklerini atayın chmod +x get_active_focus.py.
  3. Dosyayı ile çalıştırın ./get_active_focus.py.

Çıktı:

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

0

Belki de aktif süreçler için Faaliyet İzleyicisi'ni kontrol ediyor olabilirsiniz? App Nap durumundaki herhangi bir şey kolayca dışlanabilir ve avı çok daha kısa hale getirebilir.


Evet, bu sorunun ne olduğu hakkında bir tahminde bulunmanın bir yoludur, ancak bilgiyi doğrudan alan bir şey arıyorum.
Kevin Reid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.