Mac에서 어떤 프로그램이 초점을 훔치고 있는지 감지하는 방법이 있습니까?


23

Mac의 일부 앱에서 키보드 포커스를 훔치는 데 문제가 있습니다 (현재 창의 제목 표시 줄이 비활성화 됨). 그러나 실제로 자체 창이나 메뉴 표시 줄을 올리지 않고 키보드 단축키에 식별 할 수 없습니다.

메뉴 막대 나 Dock 아이콘이없는 키보드 중 하나 인 경우에도 키보드 포커스가있는 응용 프로그램을 결정하는 방법이 있습니까? 나는 거의 이것을하는 하나의 내장 기능을 알고있다. 키보드에서 호출 된 경우 강제 종료 대화 상자가 초점 응용 프로그램을 선택한 상태로 열립니다. 그러나 일반적인 도크 아이콘 응용 프로그램 만 나열하므로이 경우에는 도움이되지 않습니다.

이것은 10.8에서 10.9로 업그레이드했을 때쯤에 시작되었습니다. 이미 설치했거나 OS와 함께 업그레이드 한 앱 중 하나가 새로 오작동하는 것 같습니다.

소량의 프로그래밍 (또는 AppleScript 등), 개발자 도구 사용 등과 관련된 솔루션을 사용할 수 있습니다. 그러나“일이 없어 질 때까지 설치 제거”와 같은 것은 아닙니다. 이는 현재로서는 과도하게 방해가되기 때문입니다. 응용 프로그램을 명확하게 식별하고 버그 보고서를 제출하거나 구성을 수정하고 싶습니다.

내 연구는 답변이 포함되지 않은 Apple 지원 커뮤니티에서 동일한 요청을하는 몇 가지 스레드 만 나타났습니다.


나도 이것을보고있다. 10.9.4. 아마도 내가 실행중인 주요 앱을 공유하면 공통점이 강조 될 수 있습니까? Chrome, Firefox, Safari, Wuala, Dropbox, Nitrous, 1 비밀번호, Google 행 아웃, Evernote, Skitch, Google 드라이브, 타임 머신, 공항 기지국 에이전트, Android 파일 전송 에이전트. 그렇지 않으면 ... 아는 쉬운 해결책이 없습니다. 내 의심은 G 행 아웃입니다.
JezC

답변:


21

다음 코드를 find_focus_stealer.py파일 에 저장하고 python find_focus_stealer.py터미널에서 실행 하여 포커스를 훔치는 앱을 찾을 수 있습니다 .

스크립트 실행을 시작합니다. 3 초마다 활성 앱의 이름이 인쇄됩니다. 평소대로 작동하고 문제가 발생할 때까지 기다렸다가 몇 초 후에 터미널의 출력을 확인하십시오. 당신은 범인이 될 것입니다.

제 경우에는 Symantec Antivirus background app (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

이 Apple 토론 스레드의 iMichael_대한 크레딧 .


나는이 스크립트를 시도했다. 이상하게도 이벤트 스털링이 발생할 때마다 스크립트 실행이 중지됩니다. 창의 마지막 로그 설명은 이전 로그 설명과 다르지 않습니다. 즉, 명백한 범인이 아닙니다. 스크립트가 종료되고 오류는 없습니다.
Diodeus-James MacFarlane

2
이 파이썬 프로그램은 훌륭하게 작동했지만 Apple Installed Python을 사용해야했습니다. Python 2.7.8을 추출했으며 AppKit 모듈은 포함되어 있지 않습니다. 또한 내 시스템에서 문제가되는 앱은 SymUIAgent.app Symantec Quick Menu입니다.
Cameron Goodale

2
@ Diodeus 이것이 종료되는 이유는 포커스를 훔친 앱이 종료했기 때문이 아니라 100 초 동안 만 실행되도록 작성 되었기 때문입니다. 하려면 내가 그 단말기 창에서 Ctrl + C를 누를 때까지 나는이 변경 실행할 for i in t:while 1:
CenterOrbit

1
좋은! 저에게는 Google Drive.app이었습니다. 별도의 답변으로 게시 할 스크립트를 약간 업데이트했습니다. 감사!
medmunds

1
발생하면 및 no module named appkit을 실행하십시오 . 나를 위해 그것은 내 초점 을 훔치고 있었다easy_install pippip install pyobjcGoogle Drive
mihai

14

다음은 @Ace의 스크립트 를 약간 업데이트하여 죽일 때까지 실행되고 앱 이름이 변경 될 때만 인쇄하는 것입니다. 이 코드를 파일에 저장 find_focus_stealer.py한 다음로 실행 해보십시오 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)

이 기능을 사용하여“Google Drive”를 Mac의 포커스 스털링 범인으로 추적 할 수있었습니다.


좋은 쇼입니다!
Bruno Bronosky

이것은 나를 위해 일했습니다. 필자의 경우 포커스 스틸 링 앱은 BetterTouchTool 버전 2.636이었습니다.
Rory O'Kane

1

@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)

포커스가있는 활성 응용 프로그램의 이름을 인쇄하고 1 초마다 확인하여 변경 여부를 감지합니다.

관련 스크립트 : Gist 에서 OSX중점을 둔 앱 또는 프로세스 식별

용법:

  1. 위의 스크립트를 파일로 저장하십시오 get_active_focus.py.
  2. chmod +x get_active_focus.py명령으로 실행 속성을 지정하십시오 .
  3. 로 파일을 실행하십시오 ./get_active_focus.py.

산출:

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

0

활동 프로세스에 대한 활동 모니터를 점검 할 수 있습니까? App Nap 상태의 모든 항목은 쉽게 배제 할 수 있으며 헌트가 훨씬 짧아 질 수 있습니다.


그렇습니다. 문제가 무엇인지 추측하는 방법이지만 실제로 정보를 직접 얻는 무언가를 찾고 있습니다.
케빈 리드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.